2017-10-18 8 views
0

私は休止状態になっていますが、私はxmlでマッピングの例を試しています。アプリケーションを実行している間にエラーが発生しています。ここで私はここにcom.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:子行を追加または更新できません

を書かれているコードは、マッピングクラスである。ここで

quotation.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="main.com.paramatrix.models.Quotation" table="quotation"> 
     <id name="quotationId" type="long"> 
      <column name="QUOTATION_ID" /> 
      <generator class="identity" /> 
     </id> 
     <property column="NO_OF_ITEMS" name="noOfItems" type="long" /> 
     <property column="QUOTATION_GEN_DATE" name="quotationGenDate" 
      type="string" /> 
     <one-to-one name="invoice" class="main.com.paramatrix.models.Invoice" 
      cascade="save-update"></one-to-one> 

     <set name="itemList" table="item" inverse="true" lazy="true" 
      fetch="select"> 
      <key> 
       <column name="QUOTATION_ID" not-null="true" /> 
      </key> 
      <one-to-many class="main.com.paramatrix.models.Item" /> 
     </set> 


     <many-to-one name="user" class="main.com.paramatrix.models.User" 
      fetch="select"> 
      <column name="USER_ID" not-null="true" /> 
     </many-to-one> 

    </class> 
</hibernate-mapping> 

user.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="main.com.paramatrix.models.User" table="user"> 
     <id name="userId" type="long"> 
      <column name="USER_ID" /> 
      <generator class="identity" /> 
     </id> 
     <property column="USER_NAME" name="userName" type="string" /> 

     <set name="quotationList" table="quotation" inverse="true" lazy="true" 
      fetch="select"> 
      <key> 
       <column name="USER_ID" not-null="true" /> 
      </key> 
      <one-to-many class="main.com.paramatrix.models.Quotation" /> 
     </set> 
    </class> 
</hibernate-mapping> 

iはPOJOクラスですマッピングに使用しました

User.java

public class User implements Serializable{ 

    private long userId ; 
    private String userName; 
    private Set<Quotation> quotationList = new HashSet<Quotation>(); 
    public long getUserId() { 
     return userId; 
    } 
    public void setUserId(long userId) { 
     this.userId = userId; 
    } 
    public String getUserName() { 
     return userName; 
    } 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
    public Set<Quotation> getQuotationList() { 
     return quotationList; 
    } 
    public void setQuotationList(Set<Quotation> quotationList) { 
     this.quotationList = quotationList; 
    } 

} 


Quotation.java 

    public class Quotation implements Serializable{ 

     private long quotationId; 
     private long noOfItems; 
     private String quotationGenDate; 
     private Set<Item> itemList = new HashSet<Item>(); 
     private Invoice invoice; 
     private User user; 
     public long getQuotationId() { 
      return quotationId; 
     } 
     public void setQuotationId(long quotationId) { 
      this.quotationId = quotationId; 
     } 
     public long getNoOfItems() { 
      return noOfItems; 
     } 
     public void setNoOfItems(long noOfItems) { 
      this.noOfItems = noOfItems; 
     } 
     public String getQuotationGenDate() { 
      return quotationGenDate; 
     } 
     public void setQuotationGenDate(String quotationGenDate) { 
      this.quotationGenDate = quotationGenDate; 
     } 
     public Set<Item> getItemList() { 
      return itemList; 
     } 
     public void setItemList(Set<Item> itemList) { 
      this.itemList = itemList; 
     } 
     public Invoice getInvoice() { 
      return invoice; 
     } 
     public void setInvoice(Invoice invoice) { 
      this.invoice = invoice; 
     } 
     public User getUser() { 


      return user; 
      } 
      public void setUser(User user) { 
       this.user = user; 
      } 


     } 
App.js 
public class App { 

    public static void main(String args[]) { 
     User user = new User(); 
     user.setUserName("Pradip"); 

     Quotation quotation = new Quotation(); 
     Item item1 = new Item(); 
     item1.setItemName("laptop"); 
     Item item2 = new Item(); 
     item2.setItemName("mobile"); 
     // Set<Item> itemList = new HashSet<>(); 

     // itemList.add(item1); 
     // itemList.add(item2); 

     // quotation.setNoOfItems(itemList.size()); 
     quotation.setUser(user); 
     quotation.getItemList().add(item1); 
     quotation.getItemList().add(item2); 
     quotation.setNoOfItems(quotation.getItemList().size()); 

     Invoice invoice = new Invoice(); 
     invoice.setInvoiceGenDate("13-10-2017"); 
     invoice.setTotalBill(50000); 
     quotation.setInvoice(invoice); 
     invoice.setQuotation(quotation); 
     // Set<Quotation> quotationos = new HashSet<Quotation>(); 
     // quotationos.add(quotation); 
     user.getQuotationList().add(quotation); 

     DataProvider.addData(main.com.paramatrix.models.User.class, user); 

     DataProvider.addData(main.com.paramatrix.models.Quotation.class, quotation); 

     DataProvider.addData(main.com.paramatrix.models.Invoice.class, invoice); 

    } 

ありがとうございました!外部キー制約が 失敗(。hibernate_assignquotation、CONSTRAINT FKA771958CD5030893 FOREIGN KEY(USER_IDuserUSER_ID)を参照) の例外を:ここ

はエラーメッセージ

追加したり、子行を更新できませんでスレッドmain "org.hibernate.exception.ConstraintViolationException: 挿入できませんでした:[main.com.paramatrix.models.Quotation] にorg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96) でorg.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) でorg.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:63) org.hibernate.persister.entityで org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71で.AbstractEntityPersister.insert(AbstractEntityPersister.java:2346) でorg.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853) ) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(Abs tractSaveEventListener.java:320) でorg.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) でorg.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) で org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) でorg.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) org.hibernate.event.defで.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) でorg.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)org.hibernate.impl.SessionImplで 。 fireSave(SessionImpl.java:713)at org.hibernate.impl.SessionImpl.save(SessionImpl。 main.com.paramatrix.util.DataProvider.addData(DataProvider.java:10)main.com.paramatrixで でorg.hibernate.impl.SessionImpl.save(SessionImpl.java:697)における701):ジャワ。 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:util.App.main(App.java:49)によって引き起こさ 追加または子行を更新できません:。外部キー制約は、制約FKA771958CD5030893、 (hibernate_assignquotation失敗しますsun.reflect.NativeConstructorAccessorImpl.newInstanceで sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド) (不明で FOREIGN KEY(USER_IDuserUSER_ID)を参照) com.mysql.jdbc.Util.handleNewInstance(Util.java:425でjava.lang.reflect.Constructor.newInstance(不明なソース) で sun.reflect.DelegatingConstructorAccessorImpl.newInstance(不明 出典)で出所))で、 com.mysql.jdbc.Util.getInstance(Util.java:408)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java :3973)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)at com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2680)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2501)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) でcom.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) com.mysql.jdbc.PreparedStatement.executeUpdateInternal(のPreparedStatementで.java:2013) でcom.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) でcom.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998) org.hibernateました。 id.IdentityGenerator $ GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractRetu rningDelegate.java:56)ここ

+0

スタックトレースを追加できますか? –

+0

はちょうど質問を編集しました –

+0

エラーは、外部キー制約を尊重しないので、引用を追加または更新する前にユーザーを追加または更新しようとしている可能性があります。このエラーを生成するコードはどこですか? –

答えて

0

は私のアプローチです:

まず、見積マッピング・ファイルを更新する必要があります。その後、

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="main.com.paramatrix.models.Quotation" table="quotation"> 
     <id name="quotationId" type="long"> 
      <column name="QUOTATION_ID" /> 
      <generator class="identity" /> 
     </id> 
     <property column="NO_OF_ITEMS" name="noOfItems" type="long" /> 
     <property column="QUOTATION_GEN_DATE" name="quotationGenDate" 
      type="string" /> 
     <one-to-one name="invoice" class="main.com.paramatrix.models.Invoice" 
      cascade="save-update"></one-to-one> 

     <set name="itemList" table="item" inverse="true" lazy="true" 
      fetch="select"> 
      <key> 
       <column name="QUOTATION_ID" not-null="true" /> 
      </key> 
      <one-to-many class="main.com.paramatrix.models.Item" /> 
     </set> 


     <many-to-one name="user" class="main.com.paramatrix.models.User" 
      fetch="select"> 
      <column name="USER_ID" not-null="false" /> 
     </many-to-one> 

    </class> 
</hibernate-mapping> 

とメインを更新:

public static void main(String args[]) { 
    User user = new User(); 
    user.setUserName("Pradip"); 

    Quotation quotation = new Quotation(); 
    Item item1 = new Item(); 
    item1.setItemName("laptop"); 
    Item item2 = new Item(); 
    item2.setItemName("mobile"); 
    // Set<Item> itemList = new HashSet<>(); 

    // itemList.add(item1); 
    // itemList.add(item2); 

    // quotation.setNoOfItems(itemList.size()); 
    quotation.setUser(user); 
    quotation.getItemList().add(item1); 
    quotation.getItemList().add(item2); 
    quotation.setNoOfItems(quotation.getItemList().size()); 

    Invoice invoice = new Invoice(); 
    invoice.setInvoiceGenDate("13-10-2017"); 
    invoice.setTotalBill(50000); 
    quotation.setInvoice(invoice); 
    invoice.setQuotation(quotation); 
    DataProvider.addData(main.com.paramatrix.models.Quotation.class, quotation); 
user.getQuotationList().add(quotation); 
    DataProvider.addData(main.com.paramatrix.models.User.class, user); 



    DataProvider.addData(main.com.paramatrix.models.Invoice.class, invoice); 

} 

編集:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="main.com.paramatrix.models.User" table="user"> 
     <id name="userId" type="long"> 
      <column name="USER_ID" /> 
      <generator class="identity" /> 
     </id> 
     <property column="USER_NAME" name="userName" type="string" /> 

     <set name="quotationList" table="quotation" inverse="true" lazy="true" cascade="all" fetch="select"> 
      <key> 
       <column name="USER_ID" not-null="true" /> 
      </key> 
      <one-to-many class="main.com.paramatrix.models.Quotation" /> 
     </set> 
    </class> 
</hibernate-mapping> 
+0

スレッド "main" org.hibernateの例外。TransientObjectException:オブジェクトが未保存の一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存します:main.com.paramatrix.models.User –

+0

私の答えを編集しました! –

+0

同じエラーが発生しています –

関連する問題