Hibernate 注解
定义在 class 上面的注解 :
实体 @Entity
表 @Table
Sequence 自定义名字 @SequenceGenerator(name="mySeq" , sequenceName="mySeq_DB")
表生成器 @java.persistence.TableGenerator(
name = "表生成器的名字:myTableGen" ,
table = "表生成器的表明:GENERATOR_TABLE" ,
pkColumnName = "表中key字段的名字:pk_key" ,
valueColumnName = "表中value字段的名字:pk_value" ,
pkColumnValue = "第一条记录key字段的数据:table1" ,
allocationSize = 1 取完数值后数值步进的数值
)
定义在 属性上面的注解 :
如果字段上面不写任何注解 默认 @Basic
主键ID @id
主键的生成策略 @GeneratedValue 默认auto 相当于 native ;@GeneratedValue(stratege=Generation.SEQUENCE , generator="mySeq"/**只有上面定义了才能使用*/)
此时这个表 才用的是这个自定义的 Sequence
另一种主键的生成策略 @GeneratedValue(stratege=Generation.TABLE , generator="myTableGen"/**只有上面定义了才能使用*/)
定义符合主键的三种方式 :
1、将组件类注解为 @Embeddable ,并将组件的属性注解为 @id
2、将组件的属性注解为 @EmbeddedId
3、将类注解为 @IdClass(组件类.class) ,并将该实体中的所有属于主键的属性注解为 @Id
字段 @Column(name="字段名字" , length="长度" , precision="精度")
透明 @Transient :不会在数据库中创建该字段
时间日期字段设置精度 @Temporal:日期时间 、@Temporal(TemporalType.DATE):日期 、@Temporal(TemporalType.TIME):时间
枚举 @Enumerated(EnumType.STRING):枚举的名字 、@Enumerated(EnumType.ORDINAL) :枚举的下标值
注意 :
Hibernate 注解应当写在 getXxx() 方法上面,而不是写在属性上面
原因 :
破坏了 Java 的封装的特性,属性都是 private 的,不应该被Hibernate所访问
Hibernate 可以访问你的私有属性 甚至可以修改
Hibernate load 和 get 区别
load 是懒加载 当你取 对象里面的属性值的时候才真正的去执行 SQL 语句
get 是立即执行 SQL 查询 然后直接付给 对象使用