[英]JPA Persisting and fetching in @ManyToOne and @OneToMany
我想了解 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 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)。
謝謝
當您處理雙向的一對多關聯時,您必須始終保持關聯在雙方同步。 來自 Hibernate ORM 文檔:
每當形成雙向關聯時,應用程序開發人員必須確保雙方始終保持同步。
您的代碼應如下所示:
Student s = new Student();
s.setName("TestUser");
MobileNumber mn = new MobileNumber();
mn.setNumber("some_number");
mn.setStudent(s);
Set<MobileNumber> set = new HashSet<>();
set.add(mn);
s.setMobileNumberSet(set);
studentRepository.save(s);
請注意,您還可以將屬性hibernate.enhancer.enableAssociationManagement
設置為 true。 這將啟用 Hibernate ORM 字節碼增強功能,並且您之前的代碼可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.