作者lueichun (= =)
看板java
标题[问题] Hibernate的entity与表格的对应方式
时间Sun Jan 10 15:47:33 2021
※状况概述:
我想请问现在若有一个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://webptt.com/cn.aspx?n=bbs/java/M.1610264855.A.BC2.html
※ lueichun:转录至看板 Database 01/10 15:58
1F:→ jej: 先问一下你有查cascade的意思吗? 01/10 16:13
2F:→ jej: 免得到时候其他地方pojo作setting发生超乎你理解的事 01/10 16:13
3F:→ jej: 如果有查的话 你已经写完了 01/10 16:26
4F:→ jej: 画张ERD或是class Diagram就可以交差了 01/10 16:26
5F:→ ssccg: 你跟relational DB不太熟? one-to-many主表是不会有栏位的 01/10 19:10
6F:→ ssccg: 是要关联的表会有个栏位设Foreign key对应主表key栏位 01/10 19:13
7F:→ ssccg: 先学好RDBMS的基本就不会有这问题,然後看一楼说的cascade 01/10 19:16
cascade目前先拿掉
8F:→ ssccg: 是说这样你是怎麽理解mappedBy和@JoinColumn的用意的? 01/10 19:19
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
9F:→ internetms52: 呃…不太懂你的问题...如果staff对cust是一对多, 01/20 18:26
10F:→ internetms52: cust对staff也是1对多,这两张表的关系应该是多对 01/20 18:26
11F:→ internetms52: 多 01/20 18:26