JPA-2 基本注解

来源:互联网 发布:linux socket的值 编辑:程序博客网 时间:2024/04/29 08:57

  JPA的基本注解主要包括@Entity、@Table、@Id、@GeneratedValue、@Basic、@Column、@Transient、@Temporal和@TableGenerator等。
  其中,JPA基本注解的具体实现代码下载地址:http://download.csdn.net/download/bingbeichen/9805737。


1. @Entity

  标注位置:实体类声明语句之前;
  主要作用:标注该Java类为实体类,且将其映射到指定的数据库表。

// 例:默认将实体类Customer映射到数据库的CUSTOMER表上@Entitypublic class Customer { //... }

2. @Table

  标注位置:实体类声明语句之前,与@Entity注释并列使用;
  主要作用:标注当前实体类映射到数据库中的数据表名,当实体类与数据表名不同时使用。

// 例:将实体类Customer映射到数据库的CUSTOMERS表上@Table(name="CUSTOMERS")@Entitypublic class Customer { //... }

3. @Id

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:指定该实体类的当前属性映射到数据表的主键列。

// 例:将该实体类id属性映射到数据表的主键列@Idpublic Integer getId() {    return id;}

4. @GeneratedValue

  标注位置:与@Id注释配合使用;
  主要作用:通过其strategy属性指定数据表主键的生成策略。默认情况下,JPA自动选择最适合底层数据库的主键生成策略,即SqlServer对应identity,而MySQL对应auto increment。
  其中,在javax.persistence.GenerationType中定义了如下几种可供选择的主键生成策略:

主键生成策略 具体描述 IDENTITY 采用数据库ID自增长的方式来生成主键,但Oracle数据库不支持该方式 AUTO 默认选项,JPA自动选择合适的主键生成策略 SEQUENCE 采用序列生成主键,通过@SequenceGenerator注解指定序列名,但MySQL数据库不支持该方式 TABLE 采用外部表生成主键,框架借由表模拟序列产生主键,该策略可使应用程序更易于数据库移植
// 例:采用外部表的方式来生成主键@TableGenerator(name="ID_GENERATOR",        table="jpa_id_generators",        pkColumnName="PK_NAME",        pkColumnValue="ORDER_ID",        valueColumnName="PK_VALUE",        allocationSize=1)@GeneratedValue(strategy=GenerationType.TABLE, generator="ID_GENERATOR")//  @GeneratedValue(strategy=GenerationType.AUTO)@Idpublic Integer getId() {    return id;}

5. @Basic

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注将实体类的当前属性映射到数据库表的字段,对于没有任何标注的getter()方法,默认即为@Basic,其具有如下属性:

属性 说明 fetch 表示该属性的读取策略,取值为EAGER(主支抓取,默认值)和LAZY(延迟加载) optional 表示该属性是否允许为null,默认为true
// 例:将该实体类email属性映射到数据库表的email字段public String getEmail() {    return email;}

6. @Column

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注实体类的当前属性映射到数据库表的字段名,当属性名与数据表字段名不一致时使用。
  标注将实体类的当前属性映射到数据库表的字段,对于没有任何标注的getter()方法,默认即为@Basic,其具有如下属性:

属性 说明 name 设置映射到数据库表的字段名 unique 设置映射到数据库表的字段具有唯一约束 nullable 设置映射到数据库表的字段是否为空 length 设置映射到数据库表的字段长度 columnDefinition 设置映射到数据库表的字段的实际类型,如将String类型属性映射为BLOB或TEXT类型字段
// 例:将该实体类name属性映射到数据库表的LAST_NAME字段@Column(name="LAST_NAME")public String getName() {    return name;}

7. @Transient

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注实体类的当前属性不进行数据表字段的映射,ORM框架将忽略此映射,如实体类的getInfo()方法通常不需要映射到数据表的字段上。


8. @Temporal

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注实体类中Date类型(Java核心API中未定义Date类型的精度)的属性映射到数据表字段的具体精度(数据库中Date类型的数据有DATE、TIME和TIMESTAMP三种精度)。

// 例:将该实体类Date类型的createTime属性映射到数据库表TIMESTAMP精度的CREATE_TIME字段@Temporal(TemporalType.TIMESTAMP)@Column(name="CREATE_TIME")public Date getCreateTime() {    return createTime;}// 例:将该实体类Date类型的birth属性映射到数据库表DATE精度的BIRTH字段@Temporal(TemporalType.DATE)public Date getBirth() {    return birth;}

9. @TableGenerator:使用外部表生成主键

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:将当前主键的值单独保存到外部数据表中,每次从该外部表中查询获取其当前数据表的主键值;
  对比优势:该主键生成策略可以适用于任何数据库,故更加易于数据库的移植。
  @TableGenerator主要具有如下属性:

属性 说明 name 表示该主键生成策略的名称,其被引用在@GeneratedValue中设置的generator值中 table 表示表生成策略所持久化的表名 pkColumnName 表示在持久化表中,该主键生成策略所对应键值的名称 valueColumnName 表示在持久化表中,该主键当前所生成的值,其会随着每次创建而累加 pkColumnValue 表示在持久化表中,该生成策略所对应的主键 allocationSize 表示每次主键值增加的大小,默认值为50
// 例:采用外部表的方式来生成主键@TableGenerator(name="ID_GENERATOR",        table="jpa_id_generators",        pkColumnName="PK_NAME",        pkColumnValue="CUSTOMER_ID",        valueColumnName="PK_VALUE",        allocationSize=1)@GeneratedValue(strategy=GenerationType.TABLE, generator="ID_GENERATOR")//  @GeneratedValue(strategy=GenerationType.AUTO)@Idpublic Integer getId() {    return id;}

  这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 文本文档打开时显字符丢失怎么办 系统文件过大无法放进u盘怎么办 淘宝上买的密钥激活不了怎么办 苹果手机玩游戏屏幕卡住不动怎么办 电脑系统安装好一排英文字怎么办 赴日签证申请表写错了怎么办 不知道自己想要做什么工作怎么办 三星note4微信出现闪退怎么办 魅蓝note6手机自动闪退怎么办 苹果6s系统内存占用量过大怎么办 想在一年通过会计初级和中级怎么办 特殊岗位退休档察写的力工怎么办 面试时期望工资说低了。怎么办 面试时期望薪资写低了怎么办 高考后比一模差了80分怎么办 戒了烟我不习惯没有你我怎么办 没有你我不习惯没有你我怎么办 做什么都没兴趣嫌麻烦怎么办 快递还在路上就确认收货了怎么办 微信显示时间与手机不符怎么办 微信提示银行卡预留手机不符怎么办 得了湿疹后吃了海鲜严重了怎么办 看到小区街道乱扔的垃圾你会怎么办 去韩国干服务员不会讲韩语怎么办 华为手机键盘变英文字母大了怎么办 淘宝申请售后卖家余额不足怎么办 发票名称少写了一个字怎么办 微博数量与实际数量不一致怎么办 在淘宝中要买的商品卖完了怎么办 病因写错了保险不报销怎么办? 上学期间保险名字写错了怎么办 塑料盆上的商标纸撕了胶怎么办 川航买机票名字错了两个字怎么办 买机票护照号码填错了怎么办 换旅行证给孩子改名字怎么办 浦发信用卡卡片名字印错了怎么办 公主工作很辛苦坚持不下去怎么办 在表格里怎么办名字转换成拼音 激素脸有黑头毛孔大该怎么办 兢兢业业上班但不招领导喜欢怎么办 身体长的还算苗条但就屁股大怎么办