Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库。
这些普通Java对象被称作Entity Bean。
除了是用Java Persistence元数据将其映射到数据库外,Entity Bean与其他Java类没有任何区别。
事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。

Java Persistence API还定义了一种查询语言(JPQL),具有与SQL相类似的特征,只不过做了裁减,以便处理Java对象而非原始的关系表。

注意:在Hibernate中也有@Entity和Table这两个注解,但是其中@Entity注解已经废弃,所以本文只分析JPA下的注解

首先看看个例子:

package com.xwj.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity
@Table(name = "xwj_user", schema = "test")
public class UserEntity { @Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "ID", unique = true, nullable = false, length = )
private Integer id; @Column(name = "last_name")
private String lastName; @Column(name = "email", length = )
private String email; //TODO get和set方法略... }

解释:

  @Entity 表明该类 (UserEntity) 为一个实体类,它默认对应数据库中的表名是user_entity。这里也可以写成

      @Entity(name = "xwj_user")

      或者

      @Entity
      @Table(name = "xwj_user", schema = "test")

      查看@Entity注解,发现其只有一个属性name,表示其所对应的数据库中的表名

  @Table 当实体类与其映射的数据库表名不同名时需要使用 @Table注解说明,该标注与 @Entity 注解并列使用,置于实体类声明语句之前,可写于单独语          句行,也可与声明语句同行。
      @Table注解的常用选项是 name,用于指明数据库的表名
      @Table注解还有两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名

如果缺省@Table注解,则class字段名即表中的字段名,所以需要@Column注解来改变class中字段名与db中表的字段名的映射规则

@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下:
  )name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
  )unique:是否唯一;
  )nullable:是否允许为空;
  )length:对于字符型列,length属性指定列的最大字符长度;
  )insertable:是否允许插入;
  )updatetable:是否允许更新;
  )columnDefinition:定义建表时创建此列的DDL;
  )secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字

  

如果是主键id,还会用到@Id注解

@Id注释指定表的主键,它可以有多种生成方式:
  )TABLE:容器指定用底层的数据表确保唯一;
  )SEQUENCE:使用数据库德SEQUENCE列莱保证唯一(Oracle数据库通过序列来生成唯一ID);
  )IDENTITY:使用数据库的IDENTITY列莱保证唯一;
  )AUTO:由容器挑选一个合适的方式来保证唯一;
  )NONE:容器不负责主键的生成,由程序来完成。

其中与@Id一起使用的还有另外两个注解:@GeneratedValue、@GenericGenerator,具体使用方法可参考hibernate中的@GeneratedValue与@GenericGenerator

JPA之@Entity、@Table、@Column、@Id的更多相关文章

  1. JPA中id前面有空格导致的"Column 'id' not found"问题

    问题背景 昨晚有个同事发生了一个神奇的问题,一如既往的问题,一如既然的用我写的BEJSON-JAVA代码生成器生成,却发现一直提示Column 'id' not found.这就很TM神奇了 2018 ...

  2. Spring Data Jpa (五)@Entity实例里面常用注解详解

    详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...

  3. [转] spring @Entity @Table

    实体bean,entity 注解设置 持久化是位于JDBC之上的一个更高层抽象.持久层将对象映射到数据库,以便在查询.装载.更新或删除对象的时候,无须使用像JDBC那样繁琐的API.EJB的早期版本中 ...

  4. Hibernate,JPA注解@Entity

    通过@Entity注解将一个类声明为一个实体bean(即一个持久化POJO类), @Id注解则声明了该实体bean的标识属性. 其他的映射定义是隐式的. 就是说一个持久化POJO类,除了主键ID需要@ ...

  5. spring @Entity @Table

    import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; impor ...

  6. 由于外键的存在引发的一个mysql问题 Cannot change column 'id': used in a foreign key constraint

    Duplicate entry ' for key 'PRIMARY' 一查,发现表没有设置自增长. 尝试增加修改表,添加自增长. ALTER TABLE sh_incentive_item MODI ...

  7. 插入UUID,出现Data truncation: Data too long for column 'id' at row 1

    ssc.udf.register("getuuid", () => UUID.randomUUID().toString) val stuPCountDF_tmp1=ssc. ...

  8. Limits on Table Column Count and Row Size Databases and Tables Table Size 最大行数

    MySQL :: MySQL 8.0 Reference Manual :: C.10.4 Limits on Table Column Count and Row Size https://dev. ...

  9. NoReferencedTableError: Foreign key associated with column ** with which to generate a foreign key to target column 'id'

    1.使用 python flask 框架做项目时,在实体类中配置了 映射关系, message: id = db.Column(db.Integer, primary_key=True)message ...

随机推荐

  1. winform 批量控件取值赋值

    以前写winform 最多写几个文本框,最近需要入录一个人员信息,那好几十个字段,一下子干蒙了,这要是一个个取值赋值都写到明天了,于是就自己写了个方法,也不是什么高大上的,就是很简单很普通很low的方 ...

  2. Netbeans8.1设置Consola字体并解决中文乱码问题

    netbeans是php非常好用的ide,并且还是免费的!但是好多字体不支持中文,会显示如下乱码: 解决方法如下: 通过修改jre的配置文件成功解决了这个问题. 1. 进入jdk安装目录下/jre/l ...

  3. Class 和 MetaClass

    在 OC 中,类的一个实例定义如下: /// Represents an instance of a class. struct objc_object { Class _Nonnull isa OB ...

  4. maven安装以及eclipse配置maven

    详细地址: http://jingyan.baidu.com/article/295430f136e8e00c7e0050b9.html 介绍安装maven,配置Maven环境变量,同时在Eclips ...

  5. 【NOI2013】快餐店 环套树+线段树

    题目大意:给你一颗环套树,你要在这棵的边上(包括端点)找一个点,使得离该点最远的点最近. 数据范围:$n≤10^5$,边权$≤10^9$. 此题不难看出一种暴力做法,我们依次断开环上的一条边,然后求整 ...

  6. 【bzoj2789】 Letters 树状数组

    又是一道树状数组求逆序对的题目. 这一题我们可以将第二个串中的每一个字母,与第一个串中的字母做两两匹配,令第二个串第i个字母的值id[i]为该字母与第一个串中的字母匹配到的位置. 然后考虑到所求答案为 ...

  7. js06

    接着我们继续学习一些js的知识,这里主要讲js的一些库jq与prototype的一些基础. 1.jq函数    $():向其传递DOM对象,返回jQuery对象        jq允许通过CSS选择器 ...

  8. 前后端分离最佳实现,使用Nuxt.js快速搭建单页SSR应用

    通常我们搭建ssr应用需要自己选择多个组件集成到一起 webpack babel loaders router server-render 各种入口配置等 如果是基于vue+vuex+vue-rout ...

  9. 多线程编程,CPU是如何解决多线程内存访问问题的

    CPU对内存变量的修改是先读取内存数据到CPU Cache中,然后再由CPU做运算,运算完成后继续写入到内存中 在单核CPU中,这完全没有问题,然而在多核CPU中,每一个CPU核心都拥有自己独立的Ca ...

  10. SQL查询排名第二名的信息

    今天看见同学去面试的面试题,查询出某个字段排名第二名的信息,自己就看看 如果是Oracle ,这不就是考察Oracle分页么,以Oracle的emp表为例,根据薪水排名,查询排名第二的员工信息: se ...