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

关于@Entity和@Table注解的用法详解

程序员文章站 2022-03-10 13:02:55
目录@entity和@table注解的用法@entity注解@table注解@entity和@table的区别@entity和@table注解的用法@entity注解@entity注解和@table注...

@entity和@table注解的用法

@entity注解

@entity注解和@table注解都是java persistence api中定义的一种注解。

@entity说明这个class是实体类,并且使用默认的orm规则,即class名就是数据库表中表明,class字段名即表中字段名。@entity注解指明这是一个实体bean。

import lombok.data; 
import javax.persistence.*; 
@data
@entity(name = "t_book")
public class book {
    @id
    @generatedvalue(strategy = generationtype.identity)
    private integer id;
    @column(name = "book_name")
    private string name;
    @column(name = "book_author")
    private string author;
    private float price;
    @transient
    private string description;
}
  • @entity注解表示该类是要给实体类,在羡慕启动时会根据该类自动生成一张表,表的名称即@entity注解中name的值,如果不配置name,默认表明为类名
  • 所有的实体类都要有主键,@id注解表示该属性是一个主键,@generatedvalue注解表示注解自动生成,strategy则表示主键的生成策略
  • 默认情况下,生成的表中字段的名称就是实体类中属性的名称,通过@column注解可以定制生成的字段属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空
  • @transient注解表示在生成数据库中的表时,该属性被忽略,即不生成对应的字段 

@table注解

@table注解默认情况下只会完成表和实体之间的映射,声明才对象映射到数据库的数据表,通过它可以为实体指定表(table)

@data
@table(name="book")
public class book{
    @id
    private integer id;
    @column(name="book_name")
    private string name;
    ...
}
  • 常用属性:name  指定表
  • @table(name = "book")

@table注解是一个非必须的注解,@table注解指定了entity所要映射的数据库表,其中@table.name()用来指定映射表的表名。

如果同时使用了@entity(name="student")和@table(name="book"),最终对应的表名是book,这说明优先级:@table>@entity

@entity和@table的区别

java persistence api定义了一种定义,可以将常规的普通java对象(有时被称作pojo)映射到数据库。这些普通java对象被称作entity bean。除了是用java persistence元数据将其映射到数据库外,entity bean与其他java类没有任何区别。

事实上,创建一个entity bean对象相当于新建一条记录,删除一个entity bean会同时从数据库中删除对应记录,修改一个entity bean时,容器会自动将entity bean的状态和数据库同步。

@entity和@table的区别:

@entity说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名

如果想改变这种默认的orm规则,就要使用@table来改变class名与数据库中表名的映射规则,@column来改变class中字段名与db中表的字段名的映射规则

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。