1.表名和类名不同,对表名进行配置
a.annotation方法:@Table(name="tableName")
b.xml:<class name="Student" table="tableName"></class>
2.字段名和属性相同
a.没有注解的默认为@Basic
b.xml中不用写column
3.字段名和属性不同
a.annotation:@Column(name="columnName")
b.xml:<property column="columnName"></property>
4.不需要persistence的字段(在数据库中不存储)
a.annotation:@Transient
b.xml:不写
5.映射日期与时间类型,指定时间精度
a.annotation:@Temporal(TemporalType.DATE)
b.xml:指定type <property name="name" type="date|time"></property>
6.映射枚举类型
a.annotation:@Enumerated(EnumType.STRING|EnumType.ORDINAL)//EnumType.ORDINAL存储的是int类型
b.xml:较麻烦
7.字段映射的位置
如果注解放在字段上,实际已经破坏了java的面向对象的封装性,原因在于:
field是private的,放上注解之后hibernate可以直接访问私有成员变量(反射)
所以建议:放在get方法上
a.best practice:保持field和get set方法的一致
8.@Lob
@Lob 注解属性将被持久化为 Blob 或 Clob 类型。
具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 Clob 类型.
java.sql.Blob, Byte[], byte[] 和 serializable type 将被持久化为 Blob 类型。
Junit4的bug
如:hibernate.cfg.xml类名配置有误
Junit显示的是sessionFactory.close()报空指针异常
解决办法:
a.在beforeClass中生成sessionFactory的时候使用try catch,此时抛出异常
b.在main方法中调用beforeClass方法
06hibernate hibernate的annotation
最新推荐文章于 2014-07-09 13:42:37 发布