小编典典

持久性类是否应该初始化实例变量集合

hibernate

在我的Hibernate类中,应该初始化实例集合

public class Basket {
    private List items = new ArrayList();

    ...getters and setters...
}

或不引起注意

public class Basket {
    private List items;

    ...getters and setters...
}

对Hibernate有什么不同吗?我遇到了这个Hibernate文档,它在其中初始化了他们的HashSet,但是我经常看到他们没有被初始化。


阅读 256

收藏
2020-06-20

共1个答案

小编典典

从Hibernate的persistent collection文档中:

由于存在基础关系模型,因此,具有集合值的属性不支持空值语义。Hibernate不会区分空集合引用和空集合。

还有…

当您使实例具有持久性时,通过调用persist(),Hibernate实际上将用Hibernate自己的Set实现的实例替换HashSet。

这些“非空集合”和“持久”与“非持久”语义有时会因开发人员而丢失。为了使Hibernate对象保持简单,我更喜欢:

  • 总是Collectionsjava.util实现来初始化
  • 总是编码到Collection接口

使Hibernate对象Collection的习惯永远不会为NULL,并避免上述文档中指出的将Hibernate对象Collection转换为无效实现的陷阱。

2020-06-20