我正在尝试使用jpql更新类型为LocalDate的名为endDate的变量。我的问题如下:
@Modifying
@Query("UPDATE TeamEntity t SET t.coach.endDate = ?2 WHERE t.coach.id = ?1")
public void updateCoachEndDate(long coachId, LocalDate endDate);
TeamEntity类的一部分如下
@Entity
public class TeamEntity{
@ManyToOne
@JoinColumn(name = "coach_id", nullable = true)
private CoachEntity coach;
}
CoachEntity类的一部分如下
@Entity
public class CoachEntity{
@Id
private long id;
private LocalDate endDate
}
当我为它运行测试时,它似乎不喜欢
r.coach.endDate = ?2
它给出了以下错误
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]
我只是想知道是否有人知道如何修复这个错误。
发布于 2020-03-23 12:31:02
你的描述不匹配,也就是说我不确定“工作人员”是从哪里来的。无论如何:
Hibernate文档说:
不能在批量HQL查询中指定隐式或显式联接。可以在where子句中使用子查询,其中子查询本身可能包含联接。
在TeamEntity和Coach之间有一个隐式的连接。
所以,下一个问题是,既然你有coachId,为什么还要通过TeamEntity呢?
update Coach c set c.endDate = ?2 where c.id = ?1
应该能起到作用
https://stackoverflow.com/questions/60811998
复制相似问题