首页 > 解决方案 > 使用条件更新外键值时出现问题

问题描述

在尝试更新表 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。

标签: javaspringspring-boothibernatejpql

解决方案


推荐阅读