setter 和 LazyLoad 会话问题
Issue with setter and LazyLoad Session
前言,我对使用 Spring 完全陌生,但一直在使用它,并且在使用过程中逐渐弄清楚了。我正在使用 Java 基本 Spring。
我有一个问题,我有一个对象,除了代表游戏玩家的多对一关系之外,还包含许多东西。这是一个列表。
使用我们的控制器进行测试发现此列表的 setter 存在问题,具体而言:
org.springframework.orm.jpa.JpaSystemException: Exception occurred inside setter of com.pokerface.pokerapi.game.GameState.players; nested exception is org.hibernate.PropertyAccessException: Exception occurred inside setter of com.pokerface.pokerapi.game.GameState.players
public void setPlayers(List<Player> players) {
this.players=new ArrayList<>();
for (Player p:players){
this.players.add(p);
}
}
所以我撤消了更改以获得基本 setter:
public void setPlayers(List<Player> players) {
this.players=players;
}
但现在我 运行 遇到这个问题,即当将此集合放入数据库或从数据库中提取时,有时 returns 异常:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.pokerface.pokerapi.game.GameState.players, could not initialize proxy - no Session
我很不适应,所以如果我没有准备好适当的信息,我深表歉意。这里应该实现什么样的setter? setter 有问题吗?谢谢。
当我在调试中检查它时,如果我检查存储库中所有存储的对象,它们会退出,但玩家会说“无法计算表达式方法抛出 'org.hibernate.LazyInitializationException'
问题不在于 setter。在我看来,您正在访问 @Transactional 上下文之外的 setter 。在这种情况下,您无法在从数据库中加载包含玩家的对象后访问延迟加载实体。
前言,我对使用 Spring 完全陌生,但一直在使用它,并且在使用过程中逐渐弄清楚了。我正在使用 Java 基本 Spring。
我有一个问题,我有一个对象,除了代表游戏玩家的多对一关系之外,还包含许多东西。这是一个列表。
使用我们的控制器进行测试发现此列表的 setter 存在问题,具体而言:
org.springframework.orm.jpa.JpaSystemException: Exception occurred inside setter of com.pokerface.pokerapi.game.GameState.players; nested exception is org.hibernate.PropertyAccessException: Exception occurred inside setter of com.pokerface.pokerapi.game.GameState.players
public void setPlayers(List<Player> players) {
this.players=new ArrayList<>();
for (Player p:players){
this.players.add(p);
}
}
所以我撤消了更改以获得基本 setter:
public void setPlayers(List<Player> players) {
this.players=players;
}
但现在我 运行 遇到这个问题,即当将此集合放入数据库或从数据库中提取时,有时 returns 异常:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.pokerface.pokerapi.game.GameState.players, could not initialize proxy - no Session
我很不适应,所以如果我没有准备好适当的信息,我深表歉意。这里应该实现什么样的setter? setter 有问题吗?谢谢。
当我在调试中检查它时,如果我检查存储库中所有存储的对象,它们会退出,但玩家会说“无法计算表达式方法抛出 'org.hibernate.LazyInitializationException'
问题不在于 setter。在我看来,您正在访问 @Transactional 上下文之外的 setter 。在这种情况下,您无法在从数据库中加载包含玩家的对象后访问延迟加载实体。