[問題] Hibernate的entity與表格的對應方式

看板java作者 (= =)時間3年前 (2021/01/10 15:47), 3年前編輯推噓0(0011)
留言11則, 3人參與, 3年前最新討論串1/1
※狀況概述: 我想請問現在若有一個entity長成以下這樣: @Entity @Table(name="STAFF") public class Staff { @Id @Column(name="STAFF_ID") private int staffId; @Column(name="STAFF_NAME") private String staffName; @Column(name="ADDRESS") private String address; @Column(name="CUSTOMER_ID") @OneToMany(cascade=CascadeType.ALL,mappedBy="Staff") private TreeSet<Customer> customers = new TreeSet<>(); ...... } 意思是一個店員可以服務多個客人,所以用OneToMany來表示 那對應的table,關於CUSTOMERS的部分要如何描述呢? 例如 CREATE TABLE staff( STAFF_ID number(20) NOT NULL, STAFF_NAME varchar(45) NOT NULL, ADDRESS varchar(255), //要如何描述TreeSet<Customer> customers PRIMARY KEY (STAFF_ID) ); 又如果是多對一的情形,例如多個客人對一個店員: @Entity @Table(name="CUSTOMER") public class Customer { @Id @Column(name="CUSTOMER_ID") int customerId; @Column(name="NAME") String name; @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="STAFF_ID") Staff staff; ...... } 那對應的表格又該如何描述呢? CREATE TABLE customer( CUSTOMER_ID number(20) NOT NULL, NAME varchar(45) NOT NULL, //這邊如何描述staff?? PRIMARY KEY (CUSTOMER_ID) ); -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.40.166 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1610264855.A.BC2.htmllueichun:轉錄至看板 Database 01/10 15:58

01/10 16:13, 3年前 , 1F
先問一下你有查cascade的意思嗎?
01/10 16:13, 1F

01/10 16:13, 3年前 , 2F
免得到時候其他地方pojo作setting發生超乎你理解的事
01/10 16:13, 2F

01/10 16:26, 3年前 , 3F
如果有查的話 你已經寫完了
01/10 16:26, 3F

01/10 16:26, 3年前 , 4F
畫張ERD或是class Diagram就可以交差了
01/10 16:26, 4F

01/10 19:10, 3年前 , 5F
你跟relational DB不太熟? one-to-many主表是不會有欄位的
01/10 19:10, 5F

01/10 19:13, 3年前 , 6F
是要關聯的表會有個欄位設Foreign key對應主表key欄位
01/10 19:13, 6F

01/10 19:16, 3年前 , 7F
先學好RDBMS的基本就不會有這問題,然後看一樓說的cascade
01/10 19:16, 7F
cascade目前先拿掉

01/10 19:19, 3年前 , 8F
是說這樣你是怎麼理解mappedBy和@JoinColumn的用意的?
01/10 19:19, 8F
mappedBy目前是理解成放外部鍵對應屬性的地方 @JoinColumn理解成放外部鍵欄位的地方 目前是先寫成這樣: @Entity @Table(name="CUSTOMER") public class Customer { ...... @ManyToOne @JoinColumn(name="STAFF_ID") Staff staff; ...... } @Entity @Table(name="STAFF") public class Staff { ...... @OneToMany(mappedBy="staff") private Set<Customer> customers; ...... } 表格: CUSTOMER: https://i.imgur.com/RUSle8e.png
STAFF: https://i.imgur.com/hIAJ7Gj.png
啟動Server時可正常啟動且可正常執行persist。 ※ 編輯: lueichun (1.167.41.211 臺灣), 01/14/2021 15:21:59

01/20 18:26, 3年前 , 9F
呃…不太懂你的問題...如果staff對cust是一對多,
01/20 18:26, 9F

01/20 18:26, 3年前 , 10F
cust對staff也是1對多,這兩張表的關係應該是多對
01/20 18:26, 10F

01/20 18:26, 3年前 , 11F
01/20 18:26, 11F
文章代碼(AID): #1V-h4Nl2 (java)
文章代碼(AID): #1V-h4Nl2 (java)