引起:org.hibernate.MappingException:找到的元素的重复属性映射

时间:2017-12-26 07:23:02

标签: java hibernate

我正在尝试从statusHistoryLogs到hibernate中的元素的一对一映射。我是Hibernate的新手。我还在element.hbm.xml中添加了一对一的映射。 我收到以下错误:在com.ot.entry.members.StatusHistoryLog中找到的元素的重复属性映射。 请指导我,我哪里出错了。请更正我的代码。

StatusHistoryLog.hbm.xml

  <hibernate-mapping>

  <class dynamic-insert="true" dynamic-update="true" name="com.ot.entry.members.StatusHistoryLog" table="status_history_logs">
        <id name="id" type="long">
            <column name="id" sql-type="integer"/>
            <generator class="native"/>
        </id>
        <property name="element" length="11" column="element_id" type="integer" />
        <property name="status" length="11" column="status_id" type="integer" />
        <one-to-one name="element" class="com.ot.entry.members.Element" constrained="true"/>
        <property name="period" type="period">
            <column name="start_date" not-null="true"/>
            <column name="end_date"/>
        </property>
  </class>


 </hibernate-mapping>

element.hbm.xml

<hibernate-mapping>

    <class dynamic-insert="true" dynamic-update="true" name="com.ot.entry.members.Element" abstract="true" table="members">
        <id name="id" type="long">
            <column name="id" sql-type="integer"/>
            <generator class="native"/>
        </id>
        <discriminator column="subclass" type="string" length="1"/>
        <property name="name" length="100" column="name" type="string" not-null="true"/>
        <property name="creationDate" column="creation_date" type="calendar" not-null="true"/>
        <many-to-one name="group" class="com.ot.entry.groups.Group">
            <column name="group_id" not-null="true" sql-type="integer"/>
        </many-to-one>
        <property name="status" column="status" not-null="false" length="1">
            <type name="com.paynet.utils.hibernate.StringValuedEnumType">
                <param name="enumClassName">com.ot.entry.members.Element$Status</param>
            </type>
        </property>
        <property name="email" length="100" column="email" type="string" index="ix_email"/>
        <property name="notificationLanguage"  column="notification_language" length="6" not-null="false">
            <type name="com.paynet.utils.hibernate.StringValuedEnumType">
                <param name="enumClassName">com.ot.entry.settings.LocalSettings$Language</param>
            </type>
        </property>
        <one-to-one name="user" cascade="all" class="com.ot.entry.access.User" />
        <one-to-one name="statusHistoryLogs" cascade="all" class="com.ot.entry.members.StatusHistoryLog" />
        <bag name="groupHistoryLogs" cascade="delete" inverse="true" order-by="start_date">
            <key> 
                <column name="element_id" sql-type="integer"/>
            </key>
            <one-to-many class="com.ot.entry.groups.GroupHistoryLog"/>

    </class>

</hibernate-mapping>

StatusHistoryLog.java

  public class StatusHistoryLog extends Entity {

    private static final long serialVersionUID = 68407121216377438L;
    private Element           element;
    private Status            status;
    private Period            period;

    public Element getElement() {
        return element;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public Period getPeriod() {
        return period;
    }

    public void setElement(final Element element) {
        this.element = element;
    }

    public void setPeriod(final Period period) {
        this.period = period;
    }

    @Override
    public String toString() {
        String string = getId() + ": " + getStatus().getValue() + " - begin: " + period.getBegin();
        if (period.getEnd() != null) {
            string += " - end: " + period.getEnd();
        }
        return string;
    }

}

1 个答案:

答案 0 :(得分:1)

<property name="element" length="11" column="element_id" type="integer" />

应该是

<property name="elementId" length="11" column="element_id" type="integer" />