嵌入类更新元素集合休眠失败在数据库
@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();
}
,每次我尝试添加一个新的教学经历这种配置,存储在数据库表中的数据,先被复制,然后插入新条目。我的数据库表在两次连续的方法调用后看起来像这样:
add('DS','Feili','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;
}
我认为你应该将'TeachingExperience'设置为'Entity',并尝试'update()'而不是'merge()'。请让我知道这些更改后会发生什么! – boomz
@boomz,谢谢你的回复。我已经将TeachingExperience改为实体(编辑1)。 有趣的是,在将merge()更改为update()之后,我的原始问题已解决,但又出现了另一个问题;从教学体验列表中删除项目不会传播到数据库表。 – mdoust