假设我有以下 Hibernate 映射类:
public class ClassA {
@OneToMany(fetch=EAGER)
private List<ClassB> bList;
}
当我从 Hibernate session 中读取 ClassA
的对象时,bList
字段按预期使用 PersistentList
对象进行初始化。
我发现自己有一个要求,在列表为空的情况下,我需要 Hibernate 将 bList
字段初始化为 null
,而不是用一个空的 持久列表
。理论上,Hibernate 拥有执行此操作所需的信息,因为列表上的获取是急切的。问题是根据 section 6.1 of the Hibernate docs :
Collection-valued properties do not support null value semantics because Hibernate does not distinguish between a null collection reference and an empty collection.
这很有道理,但我希望有人能想出一个巧妙的计谋来克服这个限制。我在想也许某些监听器/回调机制可以让我用空引用替换空列表。
最佳答案
您是否尝试检查 getbList() 方法?你可以这样做:
if(bList.isEmpty())
return null;
return bList;
Hibernate 将始终为您的引用创建一个对象,但您可以控制 getter 和 setter 内部的数据。如果列表有 0 个元素,您始终可以返回 null。
关于java - Hibernate 中的空集合与空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454846/