【问题标题】:Hibernate: getting not-null property references a null or transient valueHibernate:获取非空属性引用空值或瞬态值
【发布时间】:2013-11-26 18:28:04
【问题描述】:

我是 Hibernate 的新手。我有两个类“quotation”和“quotation_item” 他们的数据库结构是这样的

create table quotation
(
        quotation_id  int primary key auto_increment,
        code varchar(20),
        client_name varchar(20)
);
create table quotation_item
(
    id int primary key auto_increment,
    quotation_id int,
    item_name varchar(20),
    rate int,
    qty int,
FOREIGN KEY (quotation_id) REFERENCES quotation(quotation_id)
);

Quotation.hbm.xml 是这样的,

    <hibernate-mapping>
    <class name="com.paramatrix.pojo.Quotation" table="quotation">
    <id name="quotationId" type="int" column="quotation_id">
    <generator class="native" />
    </id>
        <property name="code" column="code" type="string" />
        <property name="clientName" column="client_name" type="string" />
        <set name="quotationItem" table="quotation_item" fetch="select" cascade="all">
        <key>
                <column name="quotation_id" not-null="true" />
            </key>
            <one-to-many class="com.paramatrix.pojo.QuotationItem" />
        </set>
        </class>
</hibernate-mapping>

QuotationItem.hbm.xml是这样的,

<hibernate-mapping>
    <class name="com.paramatrix.pojo.QuotationItem" table="quotation_item">

        <id name="id" type="int" column="id">
            <generator class="native" />
        </id>
        <many-to-one name="quotation" class="com.paramatrix.pojo.Quotation"  cascade="save-update">
            <column name="quotation_id"  not-null="true" />        
        </many-to-one>

        <property name="itemName" column="item_name" type="string" />
        <property name="rate" column="rate" type="int" />
        <property name="qty" column="qty" type="int" />
    </class>

</hibernate-mapping>

POJO 是 1>引用.java

public class Quotation {
    int quotationId;
    String code;
    String clientName;
    Set<QuotationItem> quotationItem=new HashSet<QuotationItem>();
//getter& setter    
}

2>QuotationItem.java

public class QuotationItem{
    int id;
    Quotation quotation;
    String itemName;
    int rate;
    int qty;
//getter and setter
}

主要方法是

Set<QuotationItem> set=new HashSet<QuotationItem>();
        SessionFactory factory = new Configuration().configure().buildSessionFactory();
        Session session=factory.openSession();
        session.beginTransaction();
            Quotation quotation = new Quotation();
            quotation.setCode(txtCode.getValue());
            quotation.setClientName(txtClientName.getValue());
            QuotationItem quotationItem = new QuotationItem();
            quotationItem.setItemName(txtItemName.getValue());
            quotationItem.setQty(Integer.parseInt( txtQty.getValue()));
            quotationItem.setRate(Integer.parseInt(txtRate.getValue()));
            set.add(quotationItem);
            quotation.setQuotationItem(set);
            session.saveOrUpdate((quotation));
        session.getTransaction().commit();
            System.out.println("Done");

【问题讨论】:

  • 感谢您的代码。你有什么问题?

标签: java mysql hibernate


【解决方案1】:

试试quotationItem.setQuotation(quotation)

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多