JPA的基本注解
场景
jpa入门简介与搭建helloworld(附代码下载):
https://blog.csdn.net/badao_liumang_qizhi/article/details/103473937
在上面搭建jpa的helloworld时在实体类中用到了一些注解
package com.badao.jpa.helloworld; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.table; @entity @table(name="jpa_customers") public class customer { private integer id; private string lastname; private string email; private int age; @generatedvalue(strategy = generationtype.identity) @id public integer getid() { return id; } public void setid(integer id) { this.id = id; } @column(name="last_name") public string getlastname() { return lastname; } public void setlastname(string lastname) { this.lastname = lastname; } public string getemail() { return email; } public void setemail(string email) { this.email = email; } public int getage() { return age; } public void setage(int age) { this.age = age; } }
那么除此之外jpa还有哪些基本注解
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
@entity
@entity 标注用于实体类声明语句之前,指出该java 类为实体类,将映射到指定的数据库表。如声明一个实体类 customer,它将映射到数据库中的 customer 表上。
@table
当实体类与其映射的数据库表名不同名时需要使用 @table 标注说明,该标注与 @entity
标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
@table 标注的常用选项是
name,用于指明数据库的表名
@table标注还有一个两个选项 catalog 和 schema
用于设置表所属的数据库目录或模式,通常为数据库名。uniqueconstraints 选项用于设置约束条件,通常不须设置。
@id
@id
标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
@id标注也可置于属性的getter方法之前。
@generatedvalue
@generatedvalue 用于标注主键的生成策略,通过 strategy 属性指定。默认情况下,jpa 自动选择一个最适合底层数据库的主键生成策略:sqlserver 对应 identity,mysql 对应 auto increment。
在
javax.persistence.generationtype 中定义了以下几种可供选择的策略:
identity:采用数据库 id自增长的方式来自增主键字段,oracle 不支持这种方式;
auto: jpa自动选择合适的策略,是默认选项;
sequence:通过序列产生主键,通过 @sequencegenerator 注解指定序列名,mysql
不支持这种方式
table:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
@basic
@basic 表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的 getxxxx()
方法,默认即为@basic
fetch: 表示该属性的读取策略,有 eager 和 lazy
两种,分别表示主支抓取和延迟加载,默认为 eager.
optional:表示该属性是否允许为null,
默认为true
@column
当实体的属性与其映射的数据库表的列不同名时需要使用@column
标注说明,该属性通常置于实体的属性声明语句之前,还可与 @id 标注一起使用。
@column 标注的常用属性是
name,用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:unique 、nullable、length 等。
@column 标注的 columndefinition 属性: 表示该字段在数据库中的实际类型.通常 orm
框架可以根据属性类型自动判断数据库中字段的类型,但是对于date类型仍无法确定数据库中字段类型究竟是date,time还是timestamp.此外,string的默认映射类型为varchar,
如果要将 string 类型映射到特定数据库的 blob 或text 字段类型.
@column标注也可置于属性的getter方法之前
@transient
表示该属性并非一个到数据库表的字段的映射,orm框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@transient,否则,orm框架默认其注解为@basic
@temporal
在核心的 java api 中并没有定义 date 类型的精度(temporal precision). 而在数据库中,表示 date 类型的数据有 date, time, 和 timestamp 三种精度(即单纯的日期,时间,或者两者 兼备). 在进行属性映射时可使用@temporal注解来调整精度.