Не удалось выполнить ОБНОВЛЕНИЕ с JOIN весной + JPA - PullRequest
2 голосов
/ 29 января 2020

Я пытаюсь выполнить ОБНОВЛЕНИЕ, используя проект с: - Jdk 11 - Springboot 2.2.3 - Mysql 8.0.18

Это мой запрос (в хранилище):

    @Transactional
    @Modifying
    @Query("UPDATE VC SET bulkId = :bulkId WHERE vId = :vId AND user.ttt=:TTT")
    void updateBulkId(String bulkId, String vId, String TTT);

Это моя модель V C:

@Entity
@Table
@Getter @Setter
public class VC
{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name="user_fk", referencedColumnName = "id")
    private User user;

    @Column(nullable = false)
    private String bulkId;

    private String vId;

}

, и это моя модель пользователя:

@Entity
@Table
@Getter @Setter
public class User
{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String ttt;
}

Это ошибка, которую я получаю:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set bulkId='123ABC' where vId='1' and ttt='123'' at line 1

Я думаю, что по какой-то причине JPA не удалось объединить две таблицы (V C и User).

Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 30 января 2020

Вы можете попробовать с подзапросом:

@Query("UPDATE VC SET bulkId = :bulkId WHERE vId = :vId 
  AND user.id in (
    select u.id
    from User u
    where u.ttt=:TTT"
  )
)
0 голосов
/ 29 января 2020

Обновление - Использовать Join

У вас ошибка в вашем JPQL. Вам необходимо обратиться к связанной сущности, используя себя, как показано ниже, и добавить @Param:

@Transactional
@Modifying 
@Query("UPDATE VC vc JOIN vc.user u SET vc.bulkId = :bulkId WHERE vc.vId = :vId AND u.ttt=:TTT")
void updateBulkId(@Param("bulkId")String bulkId, @Param("vId")String vId, @Param("TTT")String TTT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...