Spring Boot Data JPA:Hibernate Session 问题

2024-04-16

我正在开发一个基于 Spring Boot 的 Web 应用程序。我严重依赖@ComponentScan and @EnableAutoConfiguration and 没有明确的 XML配置到位。

我有以下问题。我有一个JPA-带注释的实体类称为UserSettings:

@Entity public class UserSettings {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToMany(cascade = CascadeType.ALL)
    private Set<Preference> preferences; // 'Preference' is another @Entity class

    public UserSettings() {
         this.preferences = new HashSet<Preference>();
    }

// some more primitive properties, Getters, Setters...
}

我跟着this https://spring.io/guides/gs/accessing-data-jpa/教程并创建了一个扩展的存储库接口JpaRepository<UserSettings,Long>.

此外,我还有一个UserManager bean:

@Component public class SettingsManager {

@Autowired
UserSettingsRepository settingsRepository;

@PostConstruct
protected void init() {
    // 'findGlobalSettings' is a simple custom HQL query 
    UserSettings globalSettings = this.settingsRepository.findGlobalSettings();
    if (globalSettings == null) {
        globalSettings = new UserSettings();
        this.settingsRepository.saveAndFlush(globalSettings);
    }
}

稍后在代码中,我加载了UserSettings在这里创建的对象,再次使用findGlobalSetttings query.

问题是:每次我尝试访问@OneToMany设置对象的属性,我得到以下异常:

org.hibernate.LazyInitializationException:无法延迟初始化角色 org.example.UserSettings.preferences 的集合,无法初始化代理 - 无会话

我知道每个 HTTP 会话都有自己的 Hibernate 会话,如接受的答案中所述这个问题 https://stackoverflow.com/questions/16752799/could-not-initialize-proxy-no-session,但这并不适用于我的情况(目前我正在同一个 HTTP 会话中测试它),这就是为什么我不知道这个异常来自哪里。

我做错了什么以及如何避免该错误?


如果您希望能够访问事务外部的映射实体(您似乎正在这样做),则需要将其标记为“渴望”加入。 IE。

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot Data JPA:Hibernate Session 问题 的相关文章

随机推荐