首页 / HIBERNATE / Hibernate使用技巧
Hibernate使用技巧
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Hibernate使用技巧,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1886字,纯文字阅读大概需要3分钟。
内容图文
如何定义实体
持久化策略(或许也是整个应用)中最重要的就是实体定义。所有的对象都是从核心对象集合中繁衍而来的,因此正确的定义实体是非常重要的。下面是构建Hibernate/JPA实体方面我的一些建议。
1. 创建一个新类,实现java.io.Serializable接口(并且显式定义serialVersionUID这个变量)。
2. 增加类变量@Id Serializable id 和 @Version Date lastUpdated。这两个变量分别是数据库主键(primary key)和实现乐观锁(optimistic locking)的版本号标记。
3. 增加任何需要的属性。
4. 写一个缺省的构造器。所有的类型的变量都应该在这里初始化,包括集合(Collection),列表(List),集合(Set)等等
5. 为所有的属性创建getter和setter方法:
a) 应该为id和lastUpdated创建public getter方法,但是不要创建setter方法。
b) 应该为Collection、List、Set等类型的变量创建public getter方法,但不要创建setter方法。Public getter方法最好返回一个不能修改的list。
6. 增加JPA/Hibernate注解。给getter方法增加注解。(或者我可以直接在变量上增加注解吗?)
a) 添加Hibernate合法性注解,例如@NotNull、@Length、@Range等。
b) 即使名字相同,也应该添加@Column(name=xxx)注解。因为你肯定不想忘记数据所依赖的最初的列名是什么。
c) 在定义关系的实体中增加@OneToOne、@OneToMany、 @ManyToOne 或者@ManyToMany注解
7. 如果使用关系映射,确保其是双向的(bidirectional)。简单起见,我会创建工具方法(utility method)来处理关系映射的一端:集合(Collection)类型的属性有工具方法 addXXX和removeXXX。(或许对应的关系映射的另一端类的setter方法应该设为受保护的(protected),然后从工具方法中调用)
8. 实现equal和hashcode方法。非常重要!
a) 这样会使用id的方式来进行比较,从而减少比较次数。
b) 使用Hibernate.isInitialized()方法来判断是否存在代理实例或者代理实例是否被初始化了。
c) 写equal和hashcode方法时,不是所有的成员(field)都要用上,而是应该使用那些真正可以区分不同对象的成员。
9. 用jakarta commons 的ToStringBuilder 构建自己的toString()方法,这样可以让调试容易些。
10. 给Spring的配置文件增加一个映射元素。
get()方法和load()方法分析
Session#get() 和 Session#load()一个很重要的区别,就是对于数据库读取效率的影响不同。get()方法从数据库返回一个对象实例,而load()方法则返回一个对象代理(proxy),当实际使用时才从当前session中返回对象实例。当使用load()时,是没有实际访问数据库的。这个时候只是通过对象的属性(非id)进行初始化工作。当进行实例赋值的时候使用load(),也就意味着并不是想立即获得对象的数据,而是得到一个标识符(identifier)从而建立起关联。还有一点很重要,就是如果数据库中不存在对应的行的时候使用load()方法,那么程序会抛出ObjectNotFoundException异常。
单元测试断言(Unit Testing Assertion)
单元测试时使用Session#flush() 和 Session#evict()分别向数据库写数据以及清除一级缓存(内存中),从而使得接下来的程序能够验证修改是否被写入了数据库。evict()方法保证下次再去读同一个实例时,拿到的不是一级缓存中的对象而是从数据库里拿出来的最新的对象。
Session#close()用来关闭当前session并且检查延迟加载(lazy association)的状态,如果没有拿到期望的数据,那么就会抛出一个LazyInitializationException异常。
原文:http://my.oschina.net/u/2260184/blog/511825
内容总结
以上是互联网集市为您收集整理的Hibernate使用技巧全部内容,希望文章能够帮你解决Hibernate使用技巧所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。