java - 使用条件更新外键值时出现问题
问题描述
在尝试更新表 2 的外键值时,出现以下错误以及如何使用条件查询更新外键值。
用户实体类:
@Entity
public class User {
@Id
@Column(name="USER_ID")
private int userId;
@Column(name="USER_NAME")
private String userName;
@OneToMany(mappedBy = "user")
private Collection<Rooms>rooms = new ArrayList<Rooms>();
}
房间实体类:
@Entity
public class Rooms {
@Id
@Column(name = "ROOM_ID")
private int roomId;
@Column(name = "ROOM_NAME")
private String RoomName;
@ManyToOne
@JoinColumn(name = "USER_ID")
private User user;
}
我的更新条件查询:
CriteriaBuilder connectionIdBuilder = roomSession.getCriteriaBuilder();
CriteriaUpdate<Rooms> criteriaUpdate = connectionIdBuilder.createCriteriaUpdate(Rooms.class);
Root<Rooms> roomRoot = criteriaUpdate.from(Rooms.class);
Path<Integer> bId = roomRoot.join("user").get(SmatrEntityParameters.USER_ID);
criteriaUpdate.where(connectionIdBuilder.equal(roomRoot.join("user").get(SmatrEntityParameters.USER_ID),userId));
roomSession.createQuery(criteriaUpdate).executeUpdate();
错误:更新/删除条件查询无法定义连接
java.lang.IllegalArgumentException: UPDATE/DELETE criteria queries cannot define joins
at org.hibernate.query.criteria.internal.path.RootImpl.illegalJoin(RootImpl.java:69)
at org.hibernate.query.criteria.internal.path.AbstractFromImpl.join(AbstractFromImpl.java:393)
at org.hibernate.query.criteria.internal.path.AbstractFromImpl.join(AbstractFromImpl.java:386)
at com.sss.iot.smatr.util.CriteriaMethods.updatereference(CriteriaMethods.java:232)
请给我有关如何更新外键值的建议,即此处使用标准查询的用户 ID。
解决方案
推荐阅读
- python - 使用带有 html.fromstring 的 xpath 时获取空列表
- python - import numpy 导致 Python 在 Windows Server 2012R2 VM 上崩溃
- c# - c#使用字符串参数定义在对象列表中过滤的属性
- c# - System.IO.IOException:移动文件时文件存在
- linux - 如果标签之间是值,如何在html标签之间grep / sed
- vpn - 连接到 VPN 时如何使用 ngrok 进行隧道传输?
- sql - 更新日期中的年份字段或将 varchar 转换为日期
- jquery - 使用正则表达式获取标识符编号以及标识符内的字符串
- azure-devops - 如何运行 .Net Core 2.1,从 Azure Devops 编译 MsTest 单元测试程序集?
- perl - DBM 文件可以被制作它的机器上的 Perl 脚本读取,但在其他机器上“文件类型或格式不合适”