Seam creates wrong INSERT statements
steffi.stephanie.stroka.salzburgresearch.at Sep 22, 2008 11:33 AMHello!
I've the following problem when creating a table for MetaDataUpdates..
Hibernate: insert into MetadataUpdate_KiWiExtendedTriple (MetadataUpdateId, currentTripleId) values (?, ?) ERROR [org.hibernate.util.JDBCExceptionReporter] Field 'prevTripleId' doesn't have a default value
The insert statement should normally insert 3 values: MetadataUpdateId, currentTripleId and prevTripleId. currentTriple and prevTriple are both persisted in the Database. After persisting MetadataUpdate (and em.flush), the above error is printed.
Here's my MetadataUpdate class:
package kiwi.model.revision; import java.io.Serializable; @Entity public class MetadataUpdate extends KiWiUpdate implements Serializable { /** * */ private static final long serialVersionUID = 1157304931584263193L; @OneToOne private KiWiSpecialResource resource; private Date date; /* TripleStore - Metadata */ @OneToMany(cascade={CascadeType.PERSIST}) private Set<KiWiExtendedTriple> prevTriple; @OneToMany(cascade={CascadeType.PERSIST}) private Set<KiWiExtendedTriple> currentTriple; @ManyToOne private Revision revision; public MetadataUpdate() { } /** * @return the currentTriple */ public Set<KiWiExtendedTriple> getCurrentTriple() { return currentTriple; } /** * @param currentTriple the currentTriple to set */ public void setCurrentTriple(Set<KiWiExtendedTriple> currentTriple) { this.currentTriple = currentTriple; } /** * @return the prevTriple */ public Set<KiWiExtendedTriple> getPrevTriple() { return prevTriple; } /** * @param prevTriple the prevTriple to set */ public void setPrevTriple(Set<KiWiExtendedTriple> prevTriple) { this.prevTriple = prevTriple; } [...] }
And that's my KiWiExtendedTriple class:
@Entity public class KiWiExtendedTriple implements Serializable { /** * */ private static final long serialVersionUID = -8726615974625660845L; @Id @DocumentId @GeneratedValue(strategy=GenerationType.TABLE) private Long id; @Transient KiWiTripleStore context; @OneToOne(cascade={CascadeType.PERSIST}) KiWiResource subject; @OneToOne(cascade={CascadeType.PERSIST}) KiWiUriResource property; @OneToOne(cascade={CascadeType.PERSIST}) KiWiNode object; @OneToOne(cascade={CascadeType.PERSIST}) KiWiResource tripleId; @OneToOne User author; public KiWiExtendedTriple(KiWiTripleStore context, KiWiResource subject, KiWiUriResource property, KiWiNode object) { this.context = context; this.subject = subject; this.property = property; this.object = object; this.tripleId = context.createAnonResource(); } public KiWiExtendedTriple(KiWiTripleStore context, KiWiResource subject, KiWiUriResource property, KiWiNode object, KiWiUriResource tripleId) { this.context = context; this.subject = subject; this.property = property; this.object = object; this.tripleId = tripleId; } [...] }
Can someone help me figuring out what I did wrong?