Hibernate - 将一个新对象保存到另一个对象中

时间:2012-10-02 10:02:52

标签: hibernate

我的应用有问题, 我试图将一个新创建的对象保存到另一个,在1.st我创建了1.st对象o(Orders),这是有效的:

        tx = session.beginTransaction();
        Orders o = new Orders();
        o.setAccounts((Accounts) session.load(Accounts.class, id));
        o.setDatumObjednavky(datum_obj);
        o.setDoplnujuceUdaje(doplnujuce_udaje);
        Integer oid = (Integer) session.save(o);
        tx.commit();

但是当我尝试将Orders o对象设置为新创建的对象pbc时,在调用session.save(pbc)之后

        tx = session.beginTransaction();
        Orders o = new Orders();
        o.setAccounts((Accounts) session.load(Accounts.class, id));
        o.setDatumObjednavky(datum_obj);
        o.setDoplnujuceUdaje(doplnujuce_udaje);
        Integer oid = (Integer) session.save(o);


        for (int i = 0; i < list.size(); i++) {
            PiecesByCategory pbc = new PiecesByCategory();
            pbc.setOrders((Orders) session.load(Orders.class, oid));
            pbc.setCategory((Category) session.load(Category.class, list.get(i).getKategoria()));
            pbc.setPocet(list.get(i).getPocet());
            session.save(pbc);
            System.out.println("test\n");
        }

        tx.commit();

它在session.save(pbc)处崩溃:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`postcomfort`.`pieces_by_category`, CONSTRAINT `pieces_by_category_ibfk_1` FOREIGN KEY (`fk_order`) REFERENCES `orders` (`id`))

我有MySql表auto_increment,生成器类型标识,hybernate maping文件和java pojo见下文,我做错了什么?感谢您的帮助

我的hibernate.cfg.xml文件:

<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/postcomfort</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- <property name="hibernate.jdbc.use_get_generated_keys">true</property>-->
<!--<property name="hibernate.jdbc.batch_size">50</property>-->
<property name="hibernate.connection.autocommit">false</property>
<mapping resource="hlavny/Accounts.hbm.xml"/>
<mapping resource="hlavny/Role.hbm.xml"/>
<mapping resource="hlavny/LoadingParam.hbm.xml"/>
<mapping resource="hlavny/Orders.hbm.xml"/>
<mapping resource="hlavny/DocAccount.hbm.xml"/>
<mapping resource="hlavny/DocOrders.hbm.xml"/>
<mapping resource="hlavny/PiecesByCategory.hbm.xml"/>
<mapping resource="hlavny/Category.hbm.xml"/>

我的Category.hbm.xml文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 1.10.2012 10:02:17 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="hlavny.Category" table="category" catalog="postcomfort">
    <id name="id" type="int">
        <column name="id" />
        <generator class="identity" />
    </id>
    <property name="kategoria" type="string">
        <column name="kategoria" length="300" not-null="true" />
    </property>
    <set name="piecesByCategories" inverse="true">
        <key>
            <column name="fk_category" not-null="true" />
        </key>
        <one-to-many class="hlavny.PiecesByCategory" />
    </set>
</class>
</hibernate-mapping>

我的java pojo Category.java文件:

package hlavny;
// Generated 1.10.2012 10:02:17 by Hibernate Tools 3.2.1.GA


import java.util.HashSet;
import java.util.Set;

/**
 * Category generated by hbm2java
 */
public class Category  implements java.io.Serializable {


 private int id;
 private String kategoria;
 private Set<PiecesByCategory> piecesByCategories = new HashSet<PiecesByCategory>(0);

public Category() {
}


public Category(/*int id,*/ String kategoria) {
   // this.id = id;
    this.kategoria = kategoria;
}
public Category(/*int id, */String kategoria, Set<PiecesByCategory> piecesByCategories)     {
  // this.id = id;
   this.kategoria = kategoria;
   this.piecesByCategories = piecesByCategories;
}

public int getId() {
    return this.id;
}

public void setId(int id) {
    this.id = id;
}
public String getKategoria() {
    return this.kategoria;
}

public void setKategoria(String kategoria) {
    this.kategoria = kategoria;
}
public Set<PiecesByCategory> getPiecesByCategories() {
    return this.piecesByCategories;
}

public void setPiecesByCategories(Set<PiecesByCategory> piecesByCategories) {
    this.piecesByCategories = piecesByCategories;
}

}

0 个答案:

没有答案