關於@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中表的字段名的映射規則
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- jpa onetomany 使用級連表刪除被維護表數據時的坑
- JPA如何設置表名和實體名,表字段與實體字段的對應
- SpringDataJpa創建聯合索引的實現
- 使用JPA雙向多對多關聯關系@ManyToMany
- Java Hibernate中的持久化類和實體類關系