Hibernate之领域模型
来源:互联网 发布:雪肌精淘宝旗舰店 编辑:程序博客网 时间:2024/04/24 07:54
实现领域模型
如果用POJO实现领域模型,POJO最好是一个标准的JavaBean,它不应该依赖于正交的Java API, 但最好还是实现Serializable(可序列化)。当对象被存储在一个HttpSession中,或者用RMI按值传递时,就需要序列化,这可能发生在hibernate应用中。Hibernate和JPA要求每个持久化类都有一个无参构造函数,因为hibernate在这个构造函数上使用java Reflection API调用持久化类来实例化对象。构造函数可以是非公共的,但必须至少是包可见的。
实现POJO关联
用属性表达POJO类之间的关联,并用访问方法在运行时从一个对象到一个对象进行导航。
如例,一对多自关联并双向导航:
为了允许关联的双向导航,你需要两个属性。parentCategory字段实现关联的单值端,并且被声明为Category类型。多值端,由
childCategories字段实现,必须是集合类型。由于不允许重复,就选择了Set(集),并把实例变量初始化为HashSet的一个新实例。
Hibernate需要用于集合类型属性的接口,因此必须使用java.util.Set或java.util.List,而不是HashSet。这与实体中集合的JPA规范的要求相一致。不管怎样,这是集合接口编程的一个好的实践。
管理两个Category实例之间的链接,比在数据库字段中设置外键值更难。依据我们的经验,开发人员经常不知道从一个包含双向引用的网络对象模型中所产生的这种复杂性。每当在父Category和子Category之间创建一个链接时,需要两个动作:
- 必须设置子类的parentCategory,有效地破坏子类和它的旧父类之间的关联(任何子类都只能有一个父类)。
- 子类必须被添加到这个新的父Category的在Categories集合中。
给这些操作进行分组,添加一种方便的方法是个好主意。这样允许重用,帮助确保正确性,并且最终保证数据的完整性:
应该始终对关联提供这样的操作分组,如果你把它与关系数据库中外键的关系模型相比较,就很容易明白网络和指针模型如何使一个简单的操作变得复杂:不用声明约束,而是需要过程性代码来保证数据的完整性。由于想要addChildCategory()成为子类中唯一外部可见的存储器方法(可能还要加上removeChildCategory()方法),你可以让setChildCategories()方法为私有,或者删除它,并使用直接的字段访问进行持久化。
如例,多对多双向导航:
Category到Item脚手架代码
Item到Category脚手架代码,addCategory()方法处理多对多关联的完整性
还要注意一点:
你可以用hibernate持久化一个没有实现任何接口的final类,但是你不能使用代理来延迟关联加载,这会限制你进行性能优化的选择。
你也应该避免在非final类中声明public final的方法。如果你想使用一个有public final方法的类,你必须通过设置lazy="false"来明确地禁用代理.
- Hibernate之领域模型
- Hibernate领域模型
- 领域类之模型
- 领域模型之分层
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 【转】领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域模型。hibernate自动创建表????
- Hibernate实体类 == 领域模型 ?
- Hibernate实体类 == 领域模型 ?
- 领域模型设计之基本要素
- 领域模型之设计步骤
- 三十而立
- poj 1149 PIGS
- poj 1158 TRAFFIC LIGHTS
- 为什么ubuntu里在rc.local里设置的export在它执行完后会被重置?
- sql server 2005的索引的概述(聚集索引和非聚集索引的区别)
- Hibernate之领域模型
- poj 1145 Tree Summing
- 有关开发模式的几个概念-瀑布模型,极限编程,敏捷开发
- poj 1189 钉子和小球
- SQL Server开发人员应聘常被问的问题妙解汇总
- 游戏企业核心竞争力
- 实现上一篇下一篇文章的方法
- hdu 3488 && hdu 3435 && 1853
- 光脚丫学LINQ(021):在LINQ中使用存储过程(C#)