0 Replies Latest reply on Sep 22, 2008 11:33 AM by steffi.stephanie.stroka.salzburgresearch.at

    Seam creates wrong INSERT statements

    steffi.stephanie.stroka.salzburgresearch.at

      Hello!


      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?