*hibernate在3.2以后也引入了注解机制,注解的使用大大简化了我们的实体xml繁琐的配置操作,让程序员彻底从复杂的xml配置解放出来,当然注解本身也加大了代码的可读性和维护工作,但本身还是比较优秀的机制,*
1、什么是JPA
JPA是一种持久化标准,我们可以简单的理解为就是我们ORM框架的注解标准,
JPA就是javax.persistenceAPI,简称JPA,是sun公司设计的一套持久化开发的标准体系,有点想jdbc,但是jdbc只是接口没有实现,而JPA不同,他在hibernate之后产生,是sun公司希望把各大ORM框架的标准进行统一的一个设计理念,JPA在我们java里面就已经有一部分实现了。所以类似hibernate的各大持久化框架就对JPA进行了支持,所以我们使用hibernate注解实际上就是JPA,
hibernate的注解是继承自我们的JPA,但是进行功能的扩展。
2、注解入门
@Entity //该类被hibernate当做实体给管理
@Table(name=”xx_plat_role”) //对应数据库的表
catalog=”“, schema=”” 默认都为空
表示数据库的名字,并且对数据库的支持情况不同
@Id //配置主键
@GeneratedValue(strategy=GenerationType.IDENTITY) //自增策略
Strategy表示主键自增策略,取值有:
1.GenerationType.AUTO:根据底层数据库自动选择(默认)
2.GenerationType.INDENTITY:根据数据库的Identity字段生成
3.GenerationType.SEQUENCE:使用Sequence来决定主键的取值
mysql用INDENTITY, oracle就用SEQUENCE,AUTO是SQLserver使用
4.GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用
@Entity @Table(name="extra_city")
@TableGenerator(name = "tg1", table = "extra_table_seq",
allocationSize = 10, initialValue = 1, pkColumnValue = "city")
public class City {
@Id
@GeneratedValue(generator = "tg1",
strategy = GenerationType.TABLE)
private int id;
...
}
@Column(name=”role_name”, columnDefinition=”VARCHAR”, length=20) //关联字段名和数据类型
name:可选,表示数据库表中该字段的名称,默认情形属性名称一致。
Nullable:可选,表示该字段是否允许为null,默认为true。
Unique:可选,表示该字段是否是唯一标识,默认为false。
Length:可选,表示该字段的大小,仅对String类型的字段有效,默认值255。
Inserable:可选,表示在ORM框架执行插入操作时,该字段是否应出现INSERT语句中,默认为true。
Updateable:可选,表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对于一经创建就不可以更改的字段,改属性非常有用,如对于birthday字段。
hibernate管理该实体类
通过测试发现一个问题:
我们利用xml配置的hibernate是会自动创建表的,
而利用JPA注解的时候,在列的注解上:
@Column(name=”role_id”, columnDefinition=”VARCHAR”,length=20)
如果有设置类型则不会建表,
去掉类型和长度则会自动建表,如果是date和datetime也是能自动建表,