Hi,
I have 3 classes defined as such (I am leaving out getters and
setters:
@Entity
@Table(name = "ClassA")
public class ClassA {
@Id
@GeneratedValue
@Column(name = "CLASSA_ID")
private long id;
private String data;
@org.hibernate.annotations.CollectionOfElements
@JoinTable(name = "CLASSA_MEMBERS", joinColumns = @JoinColumn(name =
"CLASSA_ID"))
private Set<ClassB> children = new HashSet<ClassB>(0);
@org.hibernate.annotations.CollectionOfElements
@JoinTable( name = "CLASSC_MEMBERS", joinColumns = @JoinColumn(name =
"CLASSA_ID"))
@Cascade( {org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.PERSIST} )
private Set<ClassC> children2 = new HashSet<ClassC>(0);
}
@Embeddable
public class ClassB {
@Parent
private ClassA parent;
private String data;
}
@Entity
@Table(name = "ClassC")
public class ClassC {
@Id
@GeneratedValue
@Column(name = "CLASSC_ID")
private long id;
private String data;
}
If I execute this code I get the above (re: subject) error.
@Test
public void testCreateClassA() {
Random rnd = new Random();
Transaction tx = session.beginTransaction();
Set<ClassB> set = new HashSet<ClassB>(0);
for (int i = 0; i < 10; i++) {
ClassB child = new ClassB(String.valueOf(i));
set.add(child);
}
Set<ClassC> set2 = new HashSet<ClassC>(0);
for (int i = 0; i < 10; i++) {
ClassC child = new ClassC(String.valueOf(i));
set2.add(child);
// session.save(child);
}
ClassA clazz = new ClassA(String.valueOf(rnd.nextInt()), set);
clazz.setChildren2(set2);
session.save(clazz);
tx.commit();
}
If I remove the commented out line in my @Test everything works fine.
Why do I have to do this? I thought that @Cascade annotation should
take care of the problem?