类级别注解
@Entity:映射实体类
@Entity(name = “tableName”)
Name:可选,对应数据库中的一个表,若表名与实体类名相同,则可以省略。
@Teble(name = “”,catalog = “”,schema=“”)和@Entuty配合使用,只能标注在实体类的class处,表示实体对应的数据库的信息。
Name:可选,表示映射表的名称,默认表名和实体名称一致,只有在不一致的情况下才需要指定表名。
Catalog:可选,表示catalog名称,默认为catalog(“”).
Schema:可选,表示schema名称,默认为schema(“”).
@Embeddable表示一个非Entity类可以嵌入到另一个Entity类中的作为属性而存在。
属性级别注解
添加方式:(1)写在属性字段上面。(2)写在属性的get访问器上面
@Id:必须,定义了映射到数据库表的主键属性,一个实体类可以有一个或者多个属性被映射为主键。注意一个实体类如果定义了多个主键属性,该实体类必须实现Seriallizabler接口。
@Id @Column(length = 8) //指定数据库生成字段的大小,附在mysql中如果用主键为字符串类型,长度不能过长 private Integer emailId;
@ GeneratedValue(strategy = GenerationType,generator = “”):可选用于定义主键生成策略。
* GenerationType.AUTO :根据底层数据库自动选择(默认)需要整形支持 * GenerationType.IDENTITY :根据数据库的Identit字段生成 * GenerationType.SEQUENCE:使用SEQUENCE来决定主键的取值 * GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用例:@Id @TableGenerator(name = "tab_cat_gen",allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE) private Integer emailId;例://字符串类型 主键生成器@Id @GeneratedValue(generator = "sid")@GenericGenerator(name = "sid", strategy = "assigned") //字符串类型 主键生成器@Column(length = 8)private String emailId;
@Column:可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有用。
@Embeddable@Embedded:是注释属性的,表示该属性的类是嵌入类。注意嵌入类也必须标注@ Embeddable
@EmbeddedId:使用嵌入式主键类实现复合主键。注意:嵌入式主键必须实现Serialzable接口,必须有默认的public无参构造方法,必须覆盖equals和hshCode方法。@Transient:表示不会被ORM映射到表里的字段。
@SequenceGenerator()@GeneratedValue
@Lob @Version @Basic
级联映射注解
一对一单项外键//注意:保存时应先保存外键对象,在保存主表对象。
@OneToOne(cascade = CascadeType.ALL)@ JoinColumn(name = "id",unique = true) private TuringEmailMappingMapper turingEmailMappingMapper;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "m_id") private Long mId;
(1):数据表不用建立外键关联,需要建立一对一关联映射。
@Testpublic void test3(){ Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); TuringEmailMappingMapper turingEmailMappingMapper = new TuringEmailMappingMapper(null, 90, 3, 2); TuringMaillistGroupMapper turingEmailMapperGroup = new TuringMaillistGroupMapper(2,2,"lisi",new Date(),1,turingEmailMappingMapper); //session.save(turingEmailMappingMapper); session.save(turingEmailMapperGroup); tx.commit(); session.close(); }
“assigned”:主键由外部程序负责生成,在 save() 之前指定一个。 “hilo”:通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。 “seqhilo”:与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。 “increment” :主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。 “identity”:采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 “sequence”:采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。 “native”:由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。 “uuid.hex”: 由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。 “uuid.string”: 与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。 “foreign”:使用另外一个相关联的对象的标识符作为主键。 <id>元素中的<generator>用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现。 Increment:由hibernate自动递增生成标识符,用于为long, short或者int类型生成唯一标识。 identity :由底层数据库生成标识符(自动增长),返回的标识符是 long, short 或者int类型的。 sequence :hibernate根据底层数据库序列生成标识符,返回的标识符是long, short或者 int类型的。 hilo :使用一个高/低位算法来高效的生成long, short 或者int类型的标识符。 uuid.hex :用一个128-bit的UUID算法生成32位字符串类型的标识符。 native :根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 assigned :让应用程序在save()之前为对象分配一个标示符。 foreign :使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。
