0

開票したファイルがあります。各ユーザーを特定のコンテストでの1票に制限したいと思います。ユーザーは戻って投票を変更できますが、それによって競技会の競技者の選択が更新されます。

Hibernateマッピングファイルを使用してこれを行う方法がわかりません。(プログラミング言語はJavaです。)

私はcomposite-idの使用を検討しましたが、後で必要になった場合に備えて、このことについて一般的な数値の主キーを使用したいと思います。(私もそれを機能させる方法を理解できませんでした!=)

モデルオブジェクトとSQLを生成するマッピングファイルは次のとおりです。

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.example.project.model.db.Vote" table="vote">

        <id name="voteId" type="int">
            <meta attribute="scope-set">protected</meta>
            <meta attribute="use-in-equals">true</meta>
            <generator class="native" />
        </id>
        <many-to-one name="user" column="userId" unique="false" not-null="true" lazy="false"
            class="com.example.project.model.db.User"
        />
        <many-to-one name="competition" column="competitionId" unique="false" not-null="true" lazy="false"
            class="com.example.project.model.db.Competition"
        />
        <many-to-one name="competitor" column="competitorId" unique="false" not-null="true" lazy="false"
            class="com.example.project.model.db.Competitor"
        />
        <property name="dateAdded" type="date" not-null="true" />
    </class>
</hibernate-mapping>
4

3 に答える 3

0

次の方法でマッピングを投票からユーザーに変更すると、問題が解決します。マッピングにunique="true"を追加すると機能するはずです。

于 2012-04-13T05:56:07.133 に答える
0

アプリケーションコードではなく、データベースに制約を適用する必要があると思います。将来のある時点で、作成中のアプリケーションがこのデータに対して実行される唯一のコードではない可能性があります。別のアプリケーションが同じ制約を適用しない場合、データは破損します。また、データとデータ構造がアプリケーション コードより長持ちする可能性もあります。したがって、このタイプの制約を適用する適切な場所はデータベース上にあると私は主張します。

于 2012-04-13T04:06:31.893 に答える