《深入浅出Hibernate》(2)实体层次分析,数据关联等
来源:互联网 发布:昆明最新网络咨询招聘 编辑:程序博客网 时间:2024/05/17 23:17
1。实体层次设计:分为3类
A。Table per concret class
表与子类之间独立的一对一关系,父类不独立设表。因此子类表的父类字段必须保持一致,如果父类发生变动,相应子类也要发现更改。在某些应用中,如果要对父类进行查询,必须对所有子表进行查询并汇总,性能低下。那么,我们是否可以把父类独立成表?
B。Table per subclass
父类独立成表,子表中只保存所扩展属性,通过外键关联。如此可不必为子类编写映射文件,在父类映射文件中通过<joined-subclass>配置,注意必须配置<key>属性。本质上是运行中通过SQL的case子句进行判断。3个表?是不是太多了,一般情况下我们都是通过一个表的冗余数据来处理。
C。Table per class hierarchy
把所有父类和子类扩展属性全放在一个表中,通过一个Discriminator(辨别标记)来对子类进行区分。在映射文件中先声明辨别标记:
<discriminator colunm="category" type="String">
在subclass元素中指定标记值,如:
<subclass name="TBook" discriminator-value="1">
2。数据关联。这是ORM的重要特征,不良的数据关联设计将对性能产生致命影响。讨论了一对一,一对多,多对多3种关联模式。特别是一对多关系下,一般把控制转移给many一方,在主控方设置inverse="true",避免约束违例和提高性能等。注意,被控方的cascade需要小心设置。级联更新最好通过主控对象。被控方需要自己维护关联属性。而多对多关系,要根据情况采用延迟加载。
3。Hibernate的数据检索。
A。讨论了使用Criteria进行查询的操作,注意在hibernate3中取消了find方法,用Restrictions做为Expression的替代,两者方法基本一致。Example查询多用于组合查询。并且Criteria通过createCriteria()方法支持复合查询。
Hibernate3提供了一个新的Criteria:DetachdCriteria。此类可脱离Session实例而存在。这样我们就可以将某些通用的Criteria查询条件进行抽离,每次使用前再与当前的Session绑定以获得更好的代码重用效果,典型应用如下:
DetachedCriteria deCriterial=DetachedCriteria.forClass(TUser.class);
deCriterial.add(Restrictions.eq("age",new Integer(30)));
Criteria criteria=deCriterial.getExecutableCriteria(session);
也可以用于查询表达作为子查询,具体不多说。
Hibernate3中还可以通过Criteria完成分组和统计,分组、统计的表达式由新引入的Projections封装,Criteria通过setProjection()方法设定表达式。
B。HQL语言,在hibernate3中增加了删除和更新。典型如:
Transaction tran=session.beginTransaction();
String hql="update TUser set age=18 where id=1";
Query query=session.createQuery(hql);
int ret=query.executeUpdate(); //返回更新的字段数目
tx.commit();
4种加载方式:立即加载,预先加载,延迟加载,批量加载。
Hibernate3提供了对原生SQL和存储过程的支持。通过session.createSQLQuery(String sql,String alia,Class object)方法。引入自定义持久化实现,在映射文件中新增3个节点:<sql-insert><sql-delete><sql_update>指定用于insert,delete,update操作的SQL语句,避免了hibernate自动生声SQL语句的局限。
- 《深入浅出Hibernate》(2)实体层次分析,数据关联等
- Hibernate 映射实体关联关系(一)
- Hibernate 映射实体关联关系(二)
- hibernate 实体关联
- Hibernate实体层次设计(一)
- Hibernate实体层次设计(二)
- Hibernate实体层次设计(三)
- Hibernate实体层次设计(四)
- hibernate 数据关联(一对一关联)
- Hibernate 实体关联关系映射
- 《深入浅出Hibernate》读书笔记(2)——实体对象识别
- 《深入浅出Hibernate》读书笔记(2)——实体对象识别
- JavaEE经典试题(八)Hibernate实体关联映射
- hibernate中实体关联的注解写法(组件映射)
- SSH——Hibernate实体关联映射总结(一)
- 《深入浅出Hibernate》缓存,实体生命周期,事务处理
- 深入浅出hibernate学习笔记 实体生命周期
- Hibernate高级实体关联映射之多值的实体关联(实体类实现三重关联)
- 回家了。
- Josephu 问题 (add pin number)
- c#UBB完整版
- 一个判断session是否过期的小技巧
- 用Delphi简单实现创建控件数组
- 《深入浅出Hibernate》(2)实体层次分析,数据关联等
- 似水年华_5/2
- Tomcat详解
- 忏悔
- IT双节棍
- 获取星期几的函数
- 面临大四选择的感想
- showModalDialog()、showModelessDialog()方法使用详解
- 跑步