0

これまでのところ、関連付けは正常に機能します (存在する場合、クラスは適切なインスタンスをUserロードします) が、新しい を作成し、そのプロパティを の新しいインスタンスに設定すると、オブジェクトは保存されません。UserRolesUserRolesUserRolesUserRoles

これが私の要約 User.hbm.xml です。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="DistrictObservations.User, DistrictObservations" table="users">
    <cache usage="read-write" region="all" />

    <id name="ID" column="id" type="int" unsaved-value="0">
      <generator class="identity" />
    </id>

    <!-- snip -->

    <one-to-one name="Roles" class="DistrictObservations.UserRoles, DistrictObservations" lazy="false" />

  </class>
</hibernate-mapping>

UserRoles のマッピングは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="DistrictObservations.UserRoles, DistrictObservations" table="user_roles">
    <cache usage="read-write" region="all" />

    <id name="UserID" column="user_id" type="int" >
      <generator class="foreign">
        <param name="property">User</param>
      </generator>
    </id>

    <!-- snip -->

    <one-to-one name="User" class="DistrictObservations.User, DistrictObservations" lazy="false" constrained="true" foreign-key="FK_user_roles_users" />

  </class>
</hibernate-mapping>

UserRoles オブジェクトを User.ID を主キーとして保存する方法を知っている人はいますか? 私はドキュメントを見てきましたが、正直なところ、特に役に立ちません。

4

3 に答える 3

2

通常、不変のレガシー データベース スキーマにこだわらない限り、1 対 1 は必要ありません。ほとんどのユーザーとロールのマッピングでは、ユーザーが複数のロールに属することができ、任意の数のユーザーがロールを使用できるようになります。これは、多対多の関連付けのための連想テーブルを意味します。

アプリがユーザーごとに 1 つのロールしか必要としない場合は、RoleId を FK として Users テーブルに直接配置することをお勧めします。

そうは言っても、何らかの理由で 1 対 1 に固執する場合は、更新を行わないエンティティ (「子」エンティティ) で必ず inverse="true" を使用してください。(inverse 属性の詳細については、Hibernate の一対一のドキュメントを参照してください。十分に説明されているはずです。)

于 2009-01-22T01:19:57.537 に答える
0

おそらく何か不足していますが、User と UserRoles の間で 1 対 1 が必要ですか? ユーザーとロールの間で1対多にすることはできませんか? UserRoles は冗長なようです。

于 2009-01-21T22:34:39.853 に答える
0

1 対 1 のマッピングが必要になることはめったにありません。私がよく 1 対 1 と考えているのは、通常は 1 対多のマッピングです。2 つのテーブルの主キーと同じ値は、よくあることではありません。

クラス名の見た目から判断すると、ロールをユーザーに関連付けようとしているように見えますか? それは私には1対1のようには見えません。

そうは言っても、クラスの外部のジェネレーターが必要なことを行う必要があるようです。

于 2009-01-22T00:15:21.973 に答える