Hibernate深入学习(一):实体映射文件中的package,auto-import,dynamic-insert,dynamic-update用法
来源:互联网 发布:p2p运营模式数据图表 编辑:程序博客网 时间:2024/06/05 01:13
相信各位童鞋对Hibernate实体映射文件不会陌生,它往往以".hbm.xml"的形式存放在实体类的同级包目录下。
最近想再仔细学习hibernate,看到映射文件这部分还有很多细节不了解,特此填补一下
1.根元素hibernate-mapping的package属性,该属性表示该映射文件中统一使用package属性值作为包名
<hibernate-mapping package="cn.sina.beans" >那么我们在写class属性值时,就可以只写类名,不用写类全名了,比如:
<class name="Dog" table="dog">
<one-to-many class="Pants"/>
2.在使用HQL查询时,假如有两个Student类,也都有实体映射文件,那么hibernate怎么区分呢?
首先我们来看看hibernate无法区分时的报错信息:
Caused by: org.hibernate.DuplicateMappingException: duplicate import: Dog refers to both cn.sina.autoImport.Dog andcn.sina.entity.Dog (try using auto-import="false")此时有两种解决方案
方案一:在使用HQL查询时使用类的全名
session.createQuery("from cn.sina.entity.Dog")
方案二:为类名取个别名。在映射文件中加入:
<hibernate-mapping package="xxx" auto-import="false"> <import class="Dog" rename="doggle"/> ...... </hibernate-mapping>
session.createQuery("from doggle") //使用别名进行HQL查询
3.dynamic-insert与dynamic-update
先说说这两个属性的位置,它是<class>中的属性,此时我们使用hibernate插入一条数据
Transaction transaction = session.beginTransaction();Dog dog = new Dog();dog.setName("tom");dog.setBreed("ja");session.save(dog);transaction.commit();此时我没有设置color字段
如果不设置这两个属性时:<class name="Dog" table="dog" >
hibernate发出的sql为:主要看括号内的字段
insert into dog (name, color, breed, did) values (?, ?, ?, ?)
设置之后:<class name="Dog" table="dog" dynamic-insert="true" dynamic-update="true">
此时hibernate发出的sql为:
insert into dog (name, breed, did) values (?, ?, ?)可以看到是没有color字段的,update同理,这就是这两个属性的作用
4.为字段加索引
这个比较简单,在property元素中加入index属性,属性值就是索引名
5.foreign-key的用法:它主要用户给外键约束起一个名字,否则由hibernate自动生成
<many-to-one foreign-key="fk_brand_pants" name="brand" column="brand_id" class="Brand" />其中foreign-key是外键约束名,column是引用的外键列名,name是实体类中对应的字段名
好了,能想到也就这么多了,以后肯定还会遇到别的知识,到时候会补充
- Hibernate深入学习(一):实体映射文件中的package,auto-import,dynamic-insert,dynamic-update用法
- Hibernate的dynamic-insert与dynamic-update
- Hibernate : dynamic-update dynamic-insert - 性能影响
- hibernate dynamic-insert 和 dynamic-update使用
- Hibernate的dynamic-insert与dynamic-update
- Hibernate的dynamic-insert与dynamic-update
- hibernate dynamic-insert 和 dynamic-update使用
- dynamic-insert,dynamic-update
- Hibernate的dynamic-insert dynamic-update和select-before-update
- hibernate映射文件配置的dynamic-insert属性配置
- hibernate映射文件配置的dynamic-insert属性配置
- dynamic-insert与dynamic-update
- dynamic-insert和dynamic-update
- Hibernate优化(1)dynamic-insert和dynamic-update
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate、jpa 的dynamic-insert和dynamic-update的使用
- android studio 能在真机上启动程序,不能在模拟器上启动(模拟器能启动,adb也能识别)
- 结构体字节对齐
- C与lua交互
- 通联量化的公开课
- nginx内置预定义变量
- Hibernate深入学习(一):实体映射文件中的package,auto-import,dynamic-insert,dynamic-update用法
- Hamming(7,4)编译码器
- Java - PAT - 1008. 数组元素循环右移问题 (20)
- 对控件响应事件的四种写法
- TCP/IP网络编程之四书五经
- 直写与回写
- Program4_I
- 快速排序的简洁写法
- 自定义连接池