基础3-JPA注解

@Entity

该注解用于实体类声明语句之前,说明该JAVA类为实体类,将要映射到指定的数据库表;默认实体类的类名就是数据库的表名;

@Table

当实体类与其映射的数据库表名不一致时,需要使用该注解来标注说明;

该注解与@Entity注解并列使用,放在实体类声明语句之前,也可以写于单独语句行,也可与声明语句在同一行;

@Table注解常用的是name属性,该属性指明数据库的表名;另外该注解还有ccatalog和schema用于设置表所属的数据目录、模式,通常为数据库名;而uniqueConstraints用于设置约束条件,一般不必设置;

@Id

用于声明一个实体类的属性映射为数据库的主键列,该属性通常放在属性声明语句之前,可以与声明语句同一行,也可以单独在一行;

该注解放在属性的getter方法之前;

@GeneratedValue

用于标注主键的生成策略,通过strategy属性来指定生成策略,默认情况下,JPA自动选择一个最适合底层数据库的主键生成策略,例如:sqlserver对应identity,mysql对应autoincrement;

在javax.persistence.GenerationType中预定义了几种可供选择的策略:

①IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle暂不支持该方式;

②AUTO:JPA自己选择合适的策略,是默认选项;

③SEQUENCE:通过sequence序列来产生序列,通过@SequenceGenerator注解来指定序列名称,mysql暂不支持该方式;

④TABLE:通过表来产生主键,框架借由表模拟序列来产生主键,使用该策略可以使得应用更方便数据库迁移;

@TableGenerator

@TableGenerator注解的作用,就是前提提到主键生成策略的时候(strategy=GenerationType.TABLE),为了方便在不同数据库之间进行迁移,把主键放到单独的表中,然后每次从表中读取、递增、更新;(我上一个公司就是这么做的)

该注解配合@GeneratedValue(strategy=GenerationType.TABLE)注解一起使用;

该注解属性有:

①name:表示该主键生成策略的名称,它被引用在@GeneratedValue注解的generator属性中;

②table:表示生成策略所持久化的表名;

③pkColumnName:在持久化表中,表示该主键生成策略所对应的键值的名称;

④pkColumnValue:在持久化表中,表示该主键生成策略所对应的键值的名称;

⑤valueColumnName:表示持久化表中,该生成策略所对应的主键;

举个例子:

GeneratedKey

GeneratedValue

Info

news_id

100

新闻表news的主键

comment_id

50

评论表news_comment的主键

这里的GeneratedKey就是pkColumnName属性对应的名称;

这里的news_id就是pkColumnValue属性对应的名称;

这里的news_id对应的100的列名GeneratedValue就是valueColumnName属性对应的名称;

⑥allocationSize:每次主键值增加的大小,默认为50;

@Basic

该注解表示一个简单的属性到数据库表的字段映射,对于没有任何标注的getXXXX方法,其默认的就是@Basic注解;

该注解的fetch属性表示实体类的属性的读取策略,分为EAGER、LAZY这两种,分别表示主支抓取、延迟加载,默认值是EAGER;

该注解的optional属性表示该实体类的属性是否允许为null,默认为true;

@Column

当实体的属性与其映射的数据库表的列不同名的时候,需要使用该注解来进行标注说明;该属性通常放在实体的属性声明语句之前,可以与@Id注解一起使用;

@Column注解常用属性是name,用于设置映射数据库表的列名,同时,该注解还有unique、nullable、length、columnDefinition等属性;

其中columnDefinition属性表示该字段在数据库中的实际类型,通常ORM框架可以根据属性类型去自动判断数据库中字段的类型,但是对于Date类型让无法确定数据库中column到底是DATE、TIME、TIMESTAMP,还有就是String的默认映射类型为VARCHAR,如果要将String类型映射到特定数据库的BLOB或者TEXT类型;

@Column注解也可以置于属性的getter方法之前;

@Transient

表示该属性并非是一个到数据库表的字段的映射,ORM框架将忽略该属性;如果一个属性并非数据库表的字段映射,就务必将其表示为@Transient,否则OMR框架默认为其添加@Basic注解;

@Temporal

数据库中表示时间的类型,大致有3种:DATE/TIME/TIMESTAMP,而JAVA中的Date类型没有定义具体精度,这里使用@Temporal注解来说明java中的Date映射到数据库表时对应的时间精度;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值