欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JPA的基本注解

程序员文章站 2022-07-04 22:40:09
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 在上面搭建JPA的HelloWorld时在实体类中用到了一些注解 package com.badao ......

场景

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注解来调整精度.