嵌入式类
@Embeddable
public class TeachingExperience {
private String courseName;
private String instructor;
private String description;
}
实体 1
@Entity
public class CV {
@ElementCollection(fetch= FetchType.EAGER)
@Fetch(value = FetchMode.SELECT)
private List<TeachingExperience> teachingExperiences;
}
实体 2
@Entity
public class Student {
@OneToOne(cascade= CascadeType.ALL, orphanRemoval=true)
private CV cv;
}
CV 类存储一个人的教学经验列表。还有其他字段应该被急切地获取,因此@Fetch 注释。
我使用这种方法为给定学生的简历添加新的教学经验:
public static void add (String course, String prof, String desc) {
TeachingExperience TE = new TeachingExperience(course, prof, desc);
student.getCv().getTeachingExperiences().add(TE);
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.merge(student);
session.getTransaction().commit();
session.close();
}
每次我尝试添加新的教学体验时,使用此配置,数据存储在 DB 表中,首先复制,然后插入新条目。两次连续方法调用后我的数据库表如下所示:
add('DS', '飞丽', 'TA');
- DS Feili TA
添加('AP','Ramtin','TA');
- DS Feili TA
- DS Feili TA
- AP Ramtin TA
当我试图从教学经验列表中删除一个对象时,我遇到了同样的问题,我不确定我的代码的哪一部分是这种奇怪行为的根源。
您的帮助将不胜感激。
编辑1:
@Entity
public class TeachingExperience {
@Id @GeneratedValue
private Integer id;
private String courseName;
private String instructor;
private String description;
}
@Entity
public class CV {
@OneToMany(fetch= FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true)
@Fetch(value = FetchMode.SELECT)
@JoinColumn(name="cv")
private List<TeachingExperience> teachingExperiences;
}