解决懒惰初始化通过无知的异常
这里有无数的问题,如何通过急切获取,保持交易打开,打开另一个交易等等来解决“无法初始化代理”的问题。OpenEntityManagerInViewFilter
但是,是否可以简单地告诉Hibernate忽略问题并假装集合是空的?就我而言,之前不获取它只是意味着我不在乎。
这实际上是以下 Y 的 XY 问题:
我正在上课,比如
class Detail {
@ManyToOne(optional=false) Master master;
...
}
class Master {
@OneToMany(mappedBy="master") List<Detail> details;
...
}
并希望为两种类型的请求提供服务:一种返回一个包含所有请求的单个请求,另一种返回一个没有 .结果由Gson转换为JSON。master
details
master
details
我已经尝试过和,但是它们不会触及代替 .奏效的是session.clear
session.evict(master)
details
master.setDetails(nullOrSomeCollection)
这感觉相当笨拙。我更喜欢“无知”,因为它通常适用,而不知道代理了什么的哪些部分。
编写一个忽略 with 实例的 Gson 可能是一种方法,但这取决于 ,这肯定不是一件好事。在 中捕获异常听起来也好不到哪里去。TypeAdapter
AbstractPersistentCollection
initialized=false
org.hibernate.collection.internal
TypeAdapter
在一些答案后更新
我的目标不是“加载数据而不是异常”,而是“如何获取空值而不是异常”
Dragan提出了一个有效的观点,即忘记获取并返回错误数据将比异常情况糟糕得多。但是有一个简单的方法可以解决这个问题:
- 仅对集合执行此操作
- 从不为他们使用
null
- 返回而不是空集合作为未提取数据的指示
null
这样,结果就永远不会被错误地解释。如果我忘记获取某些内容,响应将包含无效的内容。null