注解所在的包:javax.persistence。
注意:在hibernate中,实体类中使用注解,要么都放在属性上面,要么都放在get方法上面,千万不要一部分放在属性上面,一部分放在get方法上面。
@Transient
Java的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
transient使用小结:
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
实体Bean中所有非static 非 transient 属性都可以被持久化,除非用@Transient注解。
在Hibernate中,@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。
示例:
//根据birth计算出age属性
@Transient
public int getAge() {
return getYear(new Date()) - getYear(birth);
}
或者:
@Transient
private Integer age;
@Basic
用于声明属性的存取策略:
@Basic(fetch=FetchType.EAGER):即时获取(默认的存取策略)
@Basic(fetch=FetchType.LAZY):延迟获取
所有没有定义注解的属性,等价于在其上面添加了@Basic注解。通过@Basic注解可以声明属性的获取策略(fetch strategy)。
@Entity
标志着这个类为一个实体 bean,它必须含有一个没有参数的构造函数并且在可保护范围是可见的。
@Table
JPA @Table注解详解:https://blog.csdn.net/rickesy/article/details/50788140
@Id
每一个实体 bean 都有一个主键,在类中可以用 @Id 来进行注释。主键可以是一个字段或者是多个字段的组合,这取决于表的结构。
@GeneratedValue
默认情况下,@Id 注释将自动确定最合适的主键生成策略,但是可以通过使用 @GeneratedValue 注释来覆盖掉它。有两个参数:strategy和generator。
对于strategy有四种主键生成策略:
GenerationType.TABLE(使用一个特定的数据库表格来保存主键);
GenerationType.SEQUENCE(根据底层数据库的序列来生成主键,条件是数据库支持序列);
GenerationType.IDENTITY(主键由数据库自动生成(主要是自动增长型));
GenerationType.AUTO(由容器挑选一个合适的方式来保证唯一);
例如:@GeneratedValue(strategy = GenerationType.IDENTITY)//主键生成策略
@GenericGenerator
hibernate中的@GeneratedValue与@GenericGenerator:https://blog.csdn.net/u011781521/article/details/72210980
@Column
定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下:
1)name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
2)unique:是否唯一;
3)nullable:是否允许为空;
4)length:对于字符型列,length属性指定列的最大字符长度;
5)insertable:是否允许插入;
6)updatetable:是否允许更新;
7)columnDefinition:定义建表时创建此列的DDL;
8)secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
其他:Hibernate注解方法使用总结:http://blog.sina.com.cn/s/blog_935ebb670101dnre.html