埋め込みクラス
@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 テーブルに保存されたデータが最初に複製され、次に新しいエントリが挿入されます。2 回連続してメソッドを呼び出した後のデータベース テーブルは次のようになります。
add('DS', 'Feili', 'TA');
-    DS     Feili      TA
add('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;
}