Hibernate 注解

xiaoxiao2021-02-28  54

类级别注解

@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无参构造方法,必须覆盖equalshshCode方法。@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”:采用数据库提供的主键生成机制。如DB2SQL   ServerMySQL   中的主键生成机制。       “sequence”:采用数据库提供的   sequence   机制生成主键。如   Oralce   中的Sequence      “native”:   Hibernate   根据使用的数据库自行判断采用   identityhilosequence   其中一种作为主键生成方式。    “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-bitUUID算法生成32位字符串类型的标识符。  native   :根据底层数据库的能力选择identity, sequence 或者hilo中的一个。  assigned :让应用程序在save()之前为对象分配一个标示符。  foreign :使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。
转载请注明原文地址: https://www.6miu.com/read-2628896.html

最新回复(0)