java - org.hibernate.exception.MappingException 或 ConstraintViolation

标签 java hibernate

我正在使用 hibernate 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",我会收到 ConstraintViolationException,因为用户 ID 没有放入插入查询中。如果我从帐户列表中取出 inverse="true",我会得到 org.hibernate.MappingException: Repeated column inapping for entity: com.joe.data.Account column: accountid (应使用 insert="false"进行映射更新=“假”)

为了澄清,小写名称是数据库列名称,驼峰式名称是类变量名称。我知道事务类还不能正常工作,但是如果我可以插入帐户,我可以做同样的事情来插入事务。

编辑:我在 Account 类上添加了多对一,现在我收到另一个异常,其中 hibernate 提示在 com.joe.data.Account 中缺少 userId 的 getter

最佳答案

为了获得 inverse="true"工作,您需要为帐户中的用户和事务类和映射中的帐户定义多对一。

关于java - org.hibernate.exception.MappingException 或 ConstraintViolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745162/

相关文章:

java - 向 APNS 发送推送通知(AdHoc 部署)

java - JPA 外键 OneToMany

java - 第一个 do-while 循环无法正常运行

java - [ hibernate ]错误 : entity class not found:

java - 有没有办法将列的一部分映射到变量?

java - Kafka 消费者协调器连接问题,Kafka 0.11.0.3

java - @autowire 注释不起作用

spring - 在声明式事务管理中,无论事务是提交还是回滚,如何在 Spring 中获取事务信息?

java - hibernate.MappingException 持久类未知

c# - NHibernate <一对多>