【发布时间】:2021-10-18 13:43:39
【问题描述】:
我在这张表上有一个关于休眠的更新查询
class PackEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String status;
private String oldStatus;
@ManyToOne
@JoinColumn(name = "order_id")
private OrderEntity order;
...
}
在 OrderEntity 上,当我有机器名称时,我与另一个表存在另一种关系。
在 JPA 存储库中,我有查询。基本上首先我按机器和状态搜索,然后我想更新旧状态以放置状态字段的当前值并在状态中放置新状态。就是这样:
@Transactional
@Modifying(clearAutomatically = true)
@Query("UPDATE PackEntity p " +
"SET p.oldStatus= p.status, p.status = ?3 " +
"WHERE p.id IN " +
" ( SELECT p2" +
" FROM PackEntity p2" +
" JOIN p2.order " +
" JOIN p2.order.machine" +
" WHERE p2.order.machine.name = ?1 AND p2.status = ?2)")
List<PackEntity > updateAllWithStatusByMachineNameAndStatus(String machineName, String status, String newStatus);
现在我遇到了这个错误 .QueryExecutionRequestException: Not supported for DML operations [UPDATE com.pxprox.entities.PackEntity with root cause ...
【问题讨论】:
-
问题可能是方法的返回类型,看这里:stackoverflow.com/questions/44022076/…
-
您正在使用一种预期结果为
PackEntity的方法进行更新。那是行不通的。此外,您的子选择是错误的,您选择的是整个实体,而您应该选择p2.id -
@M.Deinum 你能举个例子吗
-
举个例子?您的方法应该返回
void或int而不是List<PackEntitiy>并且如前所述,您的子选择也可能是错误的,返回一个 id 并且您也不需要其中的 JOIN。 -
@M.Deinum 由于
WHERE p2.order.machine.name的条件,我需要连接,否则会抛出错误。关于子查询,我选择SELECT p2",即List<PackEntitiy>。我唯一的问题是在我添加p.oldStatus= p.status,之后它不起作用
标签: java sql-server spring-boot hibernate spring-data-jpa