首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于更新对象的JPQL查询

用于更新对象的JPQL查询
EN

Stack Overflow用户
提问于 2020-03-23 10:44:00
回答 1查看 66关注 0票数 0

我正在尝试使用jpql更新类型为LocalDate的名为endDate的变量。我的问题如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Modifying
@Query("UPDATE TeamEntity t SET t.coach.endDate = ?2 WHERE t.coach.id = ?1")
public void updateCoachEndDate(long coachId, LocalDate endDate);

TeamEntity类的一部分如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class TeamEntity{

    @ManyToOne
    @JoinColumn(name = "coach_id", nullable = true)
    private CoachEntity coach;

}

CoachEntity类的一部分如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class CoachEntity{
    @Id
    private long id;
    private LocalDate endDate
}

当我为它运行测试时,它似乎不喜欢

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r.coach.endDate = ?2

它给出了以下错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "UPDATE Team CROSS[*] JOIN  SET END_DATE=? WHERE COACH_ID=? "; expected "., AS, SET"; SQL statement:
update team cross join  set end_date=? where coach_id=? [42001-199]

我只是想知道是否有人知道如何修复这个错误。

EN

回答 1

Stack Overflow用户

发布于 2020-03-23 12:31:02

你的描述不匹配,也就是说我不确定“工作人员”是从哪里来的。无论如何:

Hibernate文档说:

不能在批量HQL查询中指定隐式或显式联接。可以在where子句中使用子查询,其中子查询本身可能包含联接。

在TeamEntity和Coach之间有一个隐式的连接。

所以,下一个问题是,既然你有coachId,为什么还要通过TeamEntity呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
update Coach c set c.endDate = ?2 where c.id = ?1

应该能起到作用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60811998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文