0
点赞
收藏
分享

微信扫一扫

JPA中的ManyToOne和OneToMany


概念说明

一个用户可以有多个手机,一个手机只能被一个用户使用。这个就是多对一的关系,或者称之为一对多。用户是一,手机是多。外键设置在多这一方(如果不懂,可以百度一下)。具体设置的表如下:

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不知道具体怎样做关联。



举报

相关推荐

0 条评论