簡體   English   中英

org.hibernate.exception.MappingException或ConstraintViolation

[英]org.hibernate.exception.MappingException or ConstraintViolation

我正在使用休眠4.1.9。 我有用戶,用戶有帳戶列表,帳戶有交易列表。 這是我的hbm.xml

<?xml version="1.0"?>

<class name="User" table="users">
    <id name="userId" column="userid">
        <generator class="increment"/>
    </id>
    <property name="username" column="username" not-null="true"/>
    <property name="password" column="password" not-null="true"/>
    <property name="registerDate" type="timestamp" column="register_date"/>
    <list name="accounts" table="accounts" inverse="true" cascade="all">
        <key column="userid" not-null="true"/>
        <index column="accountid"/>
        <one-to-many class="com.joe.data.Account"/>
    </list>
</class>
<class name="Account" table="accounts">
    <id name="accountId" column="accountid">
        <generator class="increment"/>
    </id>
    <property name="balance" type="big_decimal" column="balance"/>
    <property name="lastModified" type="timestamp" column="last_modified"/>
    <list name="txns" table="transactions" inverse="true" cascade="all">
        <key column="accountId" not-null="true"/>
        <index column="transactionId"/>
        <one-to-many class="com.joe.data.Transaction"/>
    </list>
    <many-to-one name="userId" class="User" column="userid" not-null="true" 
         unique="true" cascade="all"/> 
    <many-to-one name="accountType" class="AccountType" column="account_type" 
        not-null="true" cascade="all" unique="true" />
</class>
<class name="Transaction" table="transactions">
    <id name="transactionId" column="transactionid">
        <generator class="increment"/>
    </id>
    <property name="description" column="description"/>
    <property name="amount" type="big_decimal" column="amount"/>
    <property name="dateAdded" column="date_added"/>
    <property name="reoccuring" type="numeric_boolean" column="reoccuring"/>
    <many-to-one name="category" class="Category" column="category" 
        not-null="true" cascade="all" unique="true" />
</class>

<class name="Category" table="categories">
    <id name="categoryId" column="categoryid"/>
    <property name="categoryName" column="categoryname" not-null="true"/>
</class>
<class name="AccountType" table="account_types">
    <id name="accountType" column="account_type"/>
    <property name="accountName" column="name"/>
</class>

如果我將inverse =“ true”保留在帳戶列表中(在User中),則會得到ConstraintViolationException,因為沒有將用戶ID放入插入查詢中。 如果我從帳戶列表中刪除inverse =“ true”,則會得到org.hibernate.MappingException:實體:com.joe.data.Account列:accountid的映射中重復的列(應映射為insert =“ false” update =“ false”)

為了闡明小寫名稱是數據庫列名稱,駝峰式是類變量名稱。 我知道Transaction類還不能正常工作,但是如果我可以插入Accounts,我可以做同樣的事情來插入Transaction。

編輯:我在Account類上添加了多對一功能,現在又遇到了另一個異常,在該異常中,hibernate抱怨在com.joe.data.Account中缺少userId的getter方法。

為了獲得inverse =“ true”的工作,您需要為Account中的User和Transaction類中的Account和映射定義多對一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM