JPA更新加入
我使用hibernate实现的spring-jpa。 我使用mariadb我尝试使用连接进行更新。
我的对象结构
@Entity
public class Room {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long roomId;
@ManyToOne
@JoinColumn(name = "appartment_id")
private Appartment appartment;
}
@Entity
public class Appartment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long appartmentId;
@OneToMany
@JoinColumn(name="appartment_id")
private Set<Room> roomList;
}
我的SQL查询
update Room r1 set r1.available = :availability
where r1.roomId in (
SELECT r2.roomId
from Room r2
JOIN r2.appartment a1
WHERE a1.appartmentId = :appartmentId
也尝试过
update Room r1 set r1.available = :availability
where exists
( SELECT r2
from Room r2
JOIN r2.appartment a1
where a1.appartmentId= :appartmentId
)
我得到这个错误
java.sql.SQLException:表'房间'被指定两次,既作为'UPDATE'的目标,也作为数据的单独来源
看起来像更新和加入MySQL似乎不可能?
每当您收到意外的令牌异常时,查找语法错误。
在你的情况下,更新查询应该如下所示:
UPDATE Room r1
SET r1.available = :availability
WHERE r1.roomId in
( SELECT r2.roomId FROM Room r2 JOIN r2.appartment a1 WHERE a1.appartmentId = :appartmentId )
编辑(后续问题):
在这里,您可能会为后续问题找到一些帮助
接受的答案以MySQL示例为例,介绍如何使用JOIN执行更新。 我很确定这就是你的追求。 现在看起来像这样:
UPDATE Room r1 JOIN r1.appartment a1
SET r1.available = :availability
WHERE a1.appartmentId = :appartmentId
尝试用你的方言,但如果它不起作用,下面的应该做的伎俩:
UPDATE Room r1 SET r1.available = :availability WHERE r1.appartment.appartmentId = :appartmentId
IN ( SELECT ... )
具有较差的性能特征。 由于您正在查看UPDATE
,我建议使用多表UPDATE
。 或EXISTS
是好的-但不是EXISTS
。 你没有把Room
的两个实例绑在一起; UPDATE
将会改变全部或全部行!
既然你没有解释查询应该做什么,我不能告诉你如何去做。
链接地址: http://www.djcxy.com/p/94681.html