Java 休眠忽略即时加载
我有一个classJava 休眠忽略即时加载,java,hibernate,lazy-loading,Java,Hibernate,Lazy Loading,我有一个classUser,带有以下字段rooms @ManyToMany(targetEntity=Room.class, fetch=FetchType.EAGER, cascade = CascadeType.ALL) @JoinTable(name="room_users", joinColumns={ @JoinColumn(name="user_id") }, inverseJoinColumns={ @JoinColumn(name=
User
,带有以下字段rooms
@ManyToMany(targetEntity=Room.class, fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="room_users",
joinColumns={ @JoinColumn(name="user_id") },
inverseJoinColumns={ @JoinColumn(name="room_id") })
@JsonIgnore
private List<Room> rooms = new ArrayList<>();
@ManyToMany(targetEntity=Room.class,fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name=“房间用户”,
joinColumns={@JoinColumn(name=“user_id”)},
inverseJoinColumns={@JoinColumn(name=“room_id”)})
@杰索尼奥雷
private List rooms=新建ArrayList();
在某个时刻,我想检查用户是否在房间里,如下所示
public ResponseEntity<?> joinRoom(@PathVariable Integer uid, @RequestHeader("Auth-Token") String token){
try{
User user = findByBackendToken(token, userRepository);
Room room = roomRepository.findByUid(uid);
if(user.getRooms().contains(room)){
return new ResponseEntity<String>(HttpStatus.NOT_MODIFIED);
} else {
roomService.joinRoom(user, room);
}
return new ResponseEntity<String>(HttpStatus.OK);
} catch(Exception e) {
e.printStackTrace();
return new ResponseEntity<String>(exception(e), HttpStatus.UNPROCESSABLE_ENTITY);
}
}
public ResponseEntity joinRoom(@PathVariable整数uid、@RequestHeader(“身份验证令牌”)字符串令牌){
试一试{
User User=findByBackendToken(token,userRepository);
Room-Room=roomRepository.findByUid(uid);
if(user.getRooms().contains(room)){
返回新的响应属性(HttpStatus.NOT_MODIFIED);
}否则{
roomService.joinRoom(用户,房间);
}
返回新的响应状态(HttpStatus.OK);
}捕获(例外e){
e、 printStackTrace();
返回新的ResponseEntity(异常(e),HttpStatus.UNPROCESSABLE_实体);
}
}
但是我发现未能延迟初始化角色集合:com.inkdrop.app.domain.models.User.rooms,无法初始化代理-行User.getRooms()中没有会话
。包含
似乎Hibernate忽略了渴望的
。有什么问题吗?您是否在事务会话中调用getRooms
?没有……我想我应该这样做,对吗?但问题是,为什么即使是渴望的Hibernate也没有加载房间。这是预料中的吗?的确如此。这应该会导致hibernate对文件室进行额外的查询。我想这应该是关于hibernate代理的事情,但我还没有足够的知识给你一个正确/完整的答案。你能展示一下你是如何在方法FindBackendToken
中查询用户的吗?