JPA update with a join
I use spring-jpa with hibernate implementation. I use mariadb I try to do an update with a join.
My object structure
@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;
}
My sql query
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
tried also
update Room r1 set r1.available = :availability
where exists
( SELECT r2
from Room r2
JOIN r2.appartment a1
where a1.appartmentId= :appartmentId
)
I get this error
java.sql.SQLException: Table 'room' is specified twice, both as a target for 'UPDATE' and as a separate source for data
Seem like update and join with mysql seem impossible?
Everytime you get the unexpected token exception, look for syntax errors.
In your case the update query should look like this:
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 )
EDIT (follow-up issue):
Here you may find some help for your follow-up question
The accepted answer features a MySQL example on how to perform an update with a JOIN. I'm quite sure that's what you're after. Now it would look something like this:
UPDATE Room r1 JOIN r1.appartment a1
SET r1.available = :availability
WHERE a1.appartmentId = :appartmentId
try it with your dialect but if it doesn't work, the following one should do the trick:
UPDATE Room r1 SET r1.available = :availability WHERE r1.appartment.appartmentId = :appartmentId
IN ( SELECT ... )
has poor performance characteristics. Since you are looking at an UPDATE
, I recommend a multi-table UPDATE
. Or EXISTS
is good -- but not that EXISTS
. You have not tied the two instances of Room
together; the UPDATE
will change all or none of the rows!
Since you have not explained what the query is supposed to do, I cannot advise you on how to do it.
链接地址: http://www.djcxy.com/p/94682.html上一篇: 在SQL Server中分页结果的最佳方式是什么?
下一篇: JPA更新加入