Hazırda bekletme özelliğini kullanarak araya girerken bir sorun yaşıyorum. Yabancı anahtar, OneToOne
eşlemelerinde çocuğa aktarılmıyor, ancak OneToMany
eşlemeleri için çalışıyor.Hazırda bekletme OneToOne çift yönlü yabancı anahtar ekleme
School.java
private long schoolId;
private set<Student> students;
private Principal principal;
@Id
@Column(name = "SCHOOL_ID", unique = true, nullable = false, precision = 15, scale = 0)
public long getSchoolId() {
return schoolId;
}
public void setSchoolId(long schoolId) {
this.schoolId = schoolId;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "school")
public set<Student> getStudents() {
return students;
}
public void setStudents(set<Student> students) {
this.students = students;
}
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "school")
public Principal getPrincipal() {
return principal;
}
public void setPrincipal(Principal principal) {
this.principal = principal;
}
bu eski ile Student.java
private long studentId;
private School school;
other data....
@Id
@Column(name = "STUDENT_ID", unique = true, nullable = false, precision = 15, scale = 0)
public long getStudentId() {
return studentId;
}
public void setStudentId(long studentId) {
this.studentId = studentId;
}
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SCHOOL_ID", nullable = false)
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
Principal.java
private long principalId;
private School school;
//other data....
@Id
@Column(name = "PRINCIPAL_ID", unique = true, nullable = false, precision = 15, scale = 0)
public long getPrincipalId() {
return principalId;
}
public void setPrincipalId(long principalId) {
this.principalId = principalId;
}
@JsonIgnore
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SCHOOL_ID", nullable = false)
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
Bir okul nesnesini kaydetmeye çalıştığımda, hazırda bekletme Okulu, ardından Öğrenciler, sonra Müdür'ü arayacaktı. Tüm öğrencilere eklendiğinde, doğru olan çağrıları
. o ana para insert çağırmak çalıştığında Ama hazırda neden
insert into PRINCIPAL (PRINCIPAL_ID) values (?)
çağırır
içine NULL ekleyemezsinizORA-01400: (. "ESAS" "school_id")
Okul nesnesinin yabancı anahtarının eklenmemesi nedeniyle. Neden OneToMany
tabloları için yabancı anahtar ekler, ancak OneToOne
tabloları anlamıyorum. Bunu nasıl düzelteceğini bilen var mı? Bu tablolar iki yönlüdür.
Ayrıca, Okul nesnesini alan ve DB'ye kaydedilen bir denetleyicim var. Bu okul nesnesini aldığınızda nesne, bu
{
"name" : "data",
"students" : [ {"name", "data"}],
"principal" : {"name", "data"}
}
benziyor ben çocuğa döngü var ve okula ebeveyni ayarlarım? çünkü bu örnekte sadece 2 seviye var, ama 4-5 seviyelerini inşa etmem gerekecek ve ebeveynlerin her birini ayarlamak için tüm yol boyunca dönmeyi istemem. İki yönlü kullanmam gerekmiyor, tek yönlü çalışma ise bunu yapardım.
'Okul <-> 'Principal' sizin örnekte de ilişkisel modelde iki yönlüdür. Öyleyse, iki taraftaki yabancı anahtarlar ertelenmiş kısıtlamaları kullanmadan null olamaz? –