setter和LazyLoad Session的问题

时间:2018-03-28 23:42:55

标签: java hibernate spring-boot setter lazyload

前言,我对使用Spring感到很陌生,但我一直在使用它,并且在我去的时候搞清楚它。我使用的是Java Basic Spring。

我有一个问题,我有一个对象,除了许多事物之外,还包含代表游戏玩家的多对一关系。这是一个清单。

使用我们的控制器进行测试显示此List的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;
}

但现在我遇到的问题是,这个集合在放入或拔出数据库时,有时会返回异常:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.pokerface.pokerapi.game.GameState.players, could not initialize proxy - no Session

我非常偏离我的元素,所以如果我没有提供适当的信息,我会道歉。应该在这里实施什么样的二传手?它甚至是setter的问题吗?谢谢。

当我在调试中检查它时,如果我检查存储库中的所有存储对象,它们会拉出但玩家声明&#34;无法评估表达式抛出&#39; org.hibernate.LazyInitializationException&#39;

1 个答案:

答案 0 :(得分:0)

问题不在于制定者。在我看来,您正在访问@Transactional上下文之外的setter。在这种情况下,从数据库加载包含播放器的对象后,您将无法访问延迟加载的实体。

请参阅https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html#transaction-declarative

相关问题