0

以下のhbmファイルがあります。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping auto-import="true" default-lazy="false">
    <class name="com.saman.entity.hibernate.EmployeeEntity"
           table="Employee" optimistic-lock="version">
        <id name="id">
            <column name="Id" sql-type="bigint"/>
            <generator class="native"/>
        </id>
        <timestamp name="version" source="db"/>
        <property  name="firstName">
            <column name="FirstName" sql-type="nvarchar(300)"/>
        </property>
        <property name="lastName">
            <column name="LastName" sql-type="nvarchar(300)"/>
        </property>
        <property name="employeeType">
            <column name="EmployeeType" sql-type="nvarchar(300)"/>
        </property>
        <set name="shifts" table="Shifts" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="Id" not-null="true"/>
            </key>
            <one-to-many class="com.saman.entity.hibernate.ShiftEntity"/>
        </set>
    </class>
</hibernate-mapping>

従業員を追加してそれを永続化する場合、以前の情報を使用して別の従業員を追加すると、システムで例外が発生し、データベースにその情報を持つ別の従業員がいることが通知されます。

休止状態は私にこのオプションを与えますか?

4

4 に答える 4

1

これをマッピングに追加するだけです

<properties name="firstName_lastName_unique" unique="true">
        <property name="firstName"/>
        <property name="lastName"/>
</properties>
于 2012-05-10T14:58:24.027 に答える
0

id 値のジェネレーターは既にあります。これにより一意の ID が生成されるはずですが、次の 2 つの条件が true の場合にのみ生成されます。

  1. 列は自動インクリメント (p. ex. MySQL) として定義されているか、またはシーケンス (p. ex. Oracle) を持っています。
  2. 新しい行を保存するとき、メンバー変数 id は 0 に設定されます。

以前の情報で新しい値を保存すると、変数 id の値は != 0 のままであると想像できます。この場合、データベースは新しい一意の値を生成する代わりに、指定された値を使用します。制約。

このエラーは、テーブルに 2 番目の一意のインデックスがある場合にも発生する可能性があります。

于 2012-05-10T12:51:02.793 に答える
0

私はあなたが達成したいことを理解していると思います。しかし、最初にstackoverflowで問題を検索するかどうかはわかりません。これがあなたの答えかもしれませ

于 2012-05-10T12:25:50.337 に答える
0

データベースの ID 列に自動インクリメントを設定しましたか?

于 2012-05-10T12:26:07.097 に答える