我正在开发一个基于 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 会话中测试它),这就是为什么我不知道这个异常来自哪里。
我做错了什么以及如何避免该错误?