我收到的時候我試圖創建一個一對多的關聯休眠:一對多協會不工作未知實體錯誤
這裏了以下錯誤在哪裏創建關聯的代碼運行
public void assignDoctorSpecialty(Doctor doctor, Specialty specialty) {
Session session = sessionFactory.openSession();
session.beginTransaction();
doctor.setSpecialty(specialty);
List<Doctor> doctors = specialty.getDoctors();
doctors.add(doctor);
session.save(doctors);
session.getTransaction().commit();
session.close();
}
這裏是我的醫生類
package edu.cs157b.hibernate;
import java.util.ArrayList;
import javax.persistence.*;
@Entity
@Table(name="DOCTOR_INFO")
@NamedQueries (
{
@NamedQuery(name = "Doctor.getAll", query = "from Doctor"),
@NamedQuery(name = "Doctor.findByName", query = "from Doctor where name = :name")
}
)
public class Doctor implements Person {
private int id;
private String name;
private Specialty specialty;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(unique=true)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne (fetch = FetchType.EAGER, cascade= CascadeType.PERSIST)
@JoinColumn(name="specialty_id")
public Specialty getSpecialty() {
return specialty;
}
public void setSpecialty(Specialty specialty) {
this.specialty = specialty;
}
}
這是我專業類
package edu.cs157b.hibernate;
import java.util.ArrayList;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="SPECIALTY_INFO")
@NamedQueries (
{
@NamedQuery(name = "Specialty.getAll", query = "from Specialty"),
@NamedQuery(name = "Specialty.findByName", query = "from Specialty where name = :name")
}
)
public class Specialty {
private List<Doctor> doctors = new ArrayList<Doctor>();
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(unique=true)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy="specialty", targetEntity = Doctor.class,
fetch=FetchType.LAZY, cascade= CascadeType.PERSIST)
public List<Doctor> getDoctors() {
return doctors;
}
public void setDoctors(List<Doctor> doctors) {
this.doctors = doctors;
}
}
編輯
如果我直接保存Doctor
對象,而不是試圖間接地保存它通過級聯保存Specialty
醫生列表,它會引發任何錯誤。但是,當我進入我的數據庫時,Doctor
表中的specialty_id
未設置。
嘗試與CascadeType.ALL –