Hibernate 注解

类级别注解

@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):数据表不用建立外键关联,需要建立一对一关联映射。

@Test
public 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>联合一起使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值