【发布时间】:2021-08-23 11:16:46
【问题描述】:
我正在尝试了解 JPA OneToMany/ManyToOne。到目前为止,正是在尝试理解 mappedBy 和 JoinColumn。
我的实体:
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.persistence.*;
@Entity
@Table(name = "mobile_number")
@Data
@ToString(exclude = "student")
public class MobileNumber {
@Id
private String number;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "student_id")
private Student student;
}
package com.example.demo.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name = "student")
@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = false)
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "student")
private Set<MobileNumber> mobileNumberSet;
}
我目前的理解:
在这里,MobileNumber 是关系的拥有方。据我了解,我可以使用 MobileNumber 实体持久化/获取学生实体。
所以如果我简单地写下面的代码:|
MobileNumber mn = new MobileNumber();
mn.setNumber("some_number");
Student s = new Student();
s.setName("TestUser");
mn.setStudent(s);
mobileNumberRepository.save(mn);
- 它会自动持久化 Student 并进行映射。
- 我可以使用 Student 实体获取 MobileNumber 实体
- 如果我现在获取 Student 实体,我将设置填充相应的 MobileNumbers 对象
如果以上几点是正确的,请帮助我
混乱的领域:
我也尝试了另一种方法 尝试坚持学生:
Student s = new Student();
s.setName("TestUser");
MobileNumber mn = new MobileNumber();
mn.setNumber("some_number");
Set<MobileNumber> set = new HashSet<>();
set.add(mn);
s.setMobileNumberSet(set);
studentRepository.save(s);
现在我不明白,这会以意想不到的方式表现。 我根本看不到 MobileNumber 得到持久化。
任何人都可以帮助我从这方面如何获取和持久化子实体(MobileNumber)。
谢谢
【问题讨论】: