2013-12-12 48 views
1

請幫助找出我的編碼有什麼問題。休眠異常中的一對多映射

主類:

SessionFactory factory = new Configuration().configure().buildSessionFactory(); 
Session session = factory.openSession(); 
session.beginTransaction();   

Classes clazz = new Classes(); 
clazz.setName("MCA"); 
session.save(clazz);  

Student s1 = new Student(); 
s1.setName("student1"); 
s1.setClazz(clazz); 

Student s2 = new Student(); 
s2.setName("student2"); 
s2.setClazz(clazz);  

session.save(s1); 
session.save(s2); 

session.getTransaction().commit(); 
session.close(); 

豆類:

public class Student { 
private int id; 
private String name; 
private Classes clazz; 

//getter and setters 
} 

public class Classes { 
private int id; 
private String name; 
private Set<Student> students; 

    //getter and setters 
} 

<class name="leo.beans.Classes" table="Clazzes"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="ID" /> 
      <generator class="native" /> 
     </id> 
     <property name="name" type="string"> 
      <column name="NAME" length="100" /> 
     </property> 
     <set name="students" table="student" inverse="true" lazy="true" 
      fetch="select"> 
      <key> 
       <column name="clazz" not-null="true" /> 
      </key> 
      <one-to-many class="leo.beans.Student" /> 
     </set> 
    </class> 
    <class name="leo.beans.Student" table="STUDENT"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="ID" /> 
      <generator class="native" /> 
     </id> 
     <property name="name" type="string"> 
      <column name="NAME" length="10" /> 
     </property> 
     <many-to-one name="clazz" class="leo.beans.Classes" 
      cascade="save-update"> 
      <column name="clazz" not-null="true" /> 
     </many-to-one> 
    </class> 

異常

NFO: schema update complete 
Hibernate: select hibernate_sequence.nextval from dual 
Hibernate: select hibernate_sequence.nextval from dual 
Hibernate: select hibernate_sequence.nextval from dual 
Hibernate: insert into Clazzes (NAME, ID) values (?, ?) 
Hibernate: insert into STUDENT (NAME, clazz, ID) values (?, ?, ?) 
Hibernate: insert into STUDENT (NAME, clazz, ID) values (?, ?, ?) 
Dec 12, 2013 10:11:15 PM org.hibernate.util.JDBCExceptionReporter logExceptions 
WARNING: SQL Error: 2291, SQLState: 23000 
Dec 12, 2013 10:11:15 PM org.hibernate.util.JDBCExceptionReporter logExceptions 
SEVERE: ORA-02291: integrity constraint (SYSTEM.FKBACA0E1B26F65B1E) violated - parent key not found 

Dec 12, 2013 10:11:15 PM org.hibernate.util.JDBCExceptionReporter logExceptions 
WARNING: SQL Error: 2291, SQLState: 23000 
Dec 12, 2013 10:11:15 PM org.hibernate.util.JDBCExceptionReporter logExceptions 
SEVERE: ORA-02291: integrity constraint (SYSTEM.FKBACA0E1B26F65B1E) violated - parent key not found 

Dec 12, 2013 10:11:15 PM org.hibernate.event.def.AbstractFlushingEventListener performExecutions 
SEVERE: Could not synchronize database state with session 
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 

回答

1

眼看竟被架構如果你可以發佈,d會很有幫助。

我首先想到的可能是它與Student-> Class級聯設置有關。由於你在學生面前明確地保存了課程,因此不需要考慮這一點。

+0

// session.save(clazz);它工作,如果我commant這條線你能告訴我這個原因。 – sunleo

+0

模式沒有問題,因爲我在休眠配置中使用「create」。 – sunleo