首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring + JPA中使用JOIN执行更新失败

在Spring + JPA中使用JOIN执行更新失败
EN

Stack Overflow用户
提问于 2020-01-30 00:39:48
回答 2查看 82关注 0票数 2

我正在尝试使用一个项目执行更新:- Jdk 11 - Springboot 2.2.3 - Mysql 8.0.18

这是我的查询(在存储库中):

代码语言:javascript
复制
    @Transactional
    @Modifying
    @Query("UPDATE VC SET bulkId = :bulkId WHERE vId = :vId AND user.ttt=:TTT")
    void updateBulkId(String bulkId, String vId, String TTT);

这是我的VC模型:

代码语言:javascript
复制
@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;

}

这是我的用户模型:

代码语言:javascript
复制
@Entity
@Table
@Getter @Setter
public class User
{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String ttt;
}

这是我得到的错误:

代码语言:javascript
复制
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无法连接两个表(VC和User)。

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-30 19:19:00

您可以尝试使用子查询:

代码语言:javascript
复制
@Query("UPDATE VC SET bulkId = :bulkId WHERE vId = :vId 
  AND user.id in (
    select u.id
    from User u
    where u.ttt=:TTT"
  )
)
票数 3
EN

Stack Overflow用户

发布于 2020-01-30 00:50:27

更新-使用连接

您的JPQL中有一个错误。如下所示引用相关实体,添加@Param

代码语言:javascript
复制
@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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59971730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档