概念说明
一个用户可以有多个手机,一个手机只能被一个用户使用。这个就是多对一的关系,或者称之为一对多。用户是一,手机是多。外键设置在多这一方(如果不懂,可以百度一下)。具体设置的表如下:
EMPLOYEE (table)
EMP_ID | FIRSTNAME | LASTNAME | SALARY | MANAGER_ID |
1 | Bob | Way | 50000 | 2 |
2 | Sarah | Smith | 75000 | null |
PHONE (table)
ID | TYPE | AREA_CODE | P_NUMBER | OWNER_ID |
1 | home | 613 | 792-0000 | 1 |
2 | work | 613 | 896-1234 | 1 |
3 | work | 416 | 123-4444 | 2 |
一定要设置ManyToOne,如果需要可以设置OneToMany。
ManyToOne设置
设置ManyToOne的具体方法如下:
@Entity
public class Phone {
@Id
private long id;
...
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="OWNER_ID")
private Employee owner;
...
}
具体说明:
fetch=FetchType.LAZY的意思是select的时候懒加载,当加载phone这个对象的时候,会加载他的属性,如id,firstname,lastname,但是不会去加载owner的属性。如果不设置fetch=FetchType.LAZY,则默认是eager,不仅会加载id,firstname,lastname等属性,而且会加载owner里面的属性。
JoinColumn指的是Phone(多)表对应Employee(一)表关联字段的名称。
OneToMany设置
设置OneToMany的具体方法如下:
@Entity
public class Employee {
@Id
@Column(name="EMP_ID")
private long id;
...
@OneToMany(mappedBy="owner")
private List<Phone> phones;
...
}
具体说明:
mappedBy="owner" 指的是在Phone这个实体类里面对应的Employee用的是哪个属性。OneToMany必须写mappedBy,不然会多生成一张没用的中间表,因为如果没写mappedBy,JPA不知道具体怎样做关联。
本文参考:https://en.wikibooks.org/wiki/Java_Persistence/OneToMany
http://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby
欢迎关注橙子博客微信公众号:chengziboke888
标签:...,OneToMany,JPA,设置,ManyToOne,owner,加载 From: https://blog.51cto.com/u_16065421/6458613