Java 无法在父级和子级上使用相同的@IdClass

Java 无法在父级和子级上使用相同的@IdClass,java,hibernate,spring-data,spring-data-jpa,Java,Hibernate,Spring Data,Spring Data Jpa,我在保存具有子对象的父对象时遇到问题。两个对象都使用@IdClass并引用同一个类(CompositeKey)。我得到以下例外情况 org.hibernate.HibernateException: identifier of an instance of com.test.ClassA was altered from com.test.CompositeKey@1ce60be2 to com.test.CompositeKey@18f9997e 调试后,我可以看到与ClassA关联的Com

我在保存具有子对象的父对象时遇到问题。两个对象都使用@IdClass并引用同一个类(CompositeKey)。我得到以下例外情况

org.hibernate.HibernateException: identifier of an instance of com.test.ClassA was altered from com.test.CompositeKey@1ce60be2 to com.test.CompositeKey@18f9997e
调试后,我可以看到与ClassA关联的CompositeKey正在以某种方式更改为与ClassB关联的CompositeKey

我相信我保存的对象是正确的,问题可能是hibernate中的某个bug

如果我创建了两个类(CompsiteKeyA和CompositeKeyB),并让ClassA和ClassB分别使用一个,那么错误就会消失

触发错误的代码:

ClassA classA = new ClassA();
classA.setName("ClassA name");
classA.setVersion(0);

ClassB classB = new ClassB();
classB.setName("ClassB name");
classB.setVersion(1);
Set<ClassB> classBs = new HashSet<>();
classBs.add(classB);

classA.setClassBs(classBs);

classADao.save(classA);
复合键:

@MappedSuperclass
public class CompositeKey {
    @Id
    private String name;
    @Id
    private Integer version;
}
@Entity
@IdClass(CompositeKey.class)
public class ClassA extends CompositeKey{
    @ManyToMany
    private Set<ClassB> classBs = new HashSet<>();
}
@Entity
@IdClass(CompositeKey.class)
public class ClassB extends CompositeKey{
    private String otherField;
}
@MappedSuperclass
public class CompositeKey {
    @Id
    private String name;
    @Id
    private Integer version;
}