Ivan B
unread,Feb 12, 2008, 6:31:19 PM2/12/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Java Web Application
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?