2

外部キーの関連付けまたは主キーの関連付け
を使用する利点は何ですか? one-to-oneone-to-one

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html#assoc-unidirection-121で入手可能なHibernateのドキュメントを読みました。

誰かが最初または2番目の実装を使用することのプラスの詳細を教えてもらえますか?

別の質問ですが、one-to-oneユーザーと境界の間には一方向の関係があります。
(ユーザー---->境界)そして外部キーに基づく関連付けを使用したい。
テーブルUserがそのまま残るように、方向を(User <---- Perimeter)に逆にすることはできますか?
それは合理的ではないと思いますが(perimeter.getUser()!!!)、技術的には可能ですか?

4

3 に答える 3

3

2つの利点があります

  • 選択肢があると、戦略として選択したものに関係なく、既存のスキーマをマップできます
  • BのIDを指すAの外部キーを使用すると、Hibernateは、外部キーがnullの場合、特定のAにBがないことを認識します。主キーがいつ使用されるかを知ることはできません。したがって、関連付けがオプションの場合は、外部キーを使用する方が効率的です。

2番目の質問については、もちろん可能です。これは、双方向のOneToOneアソシエーションと呼ばれます。

public class User {
    // ...

    @OneToOne
    @JoinColumn
    private Perimeter perimeter;
}

public class Perimeter {
    // ...

    @OneToOne(mappedBy = "perimeter")
    private User user;
}
于 2012-12-14T11:14:04.460 に答える
3

JB Nizetが述べた利点に加えて、他の人のおかげで、外部キーに基づく1対1の方がより柔軟であると私に言いました。外部キー(ユーザー<---境界)で1対1を使用していると考えてみましょう。アプリケーションの要件が変更され、任意の境界に複数のユーザーが必要になる場合、主キーを共有している場合は、多くのより多くのリファクタリングを行います。しかし、外部キーを使用したので、一意の制約を緩和するだけです;)

于 2012-12-18T22:25:07.150 に答える
1

主キーの関連付けを使用した1対1の関係

この関連付けでは、1つのエンティティが別のエンティティの1つのオカレンスに正確に関連付けられている場合に、1対1の関係が発生します。

たとえば、リンクは次のとおりです。 主キーの関連付け

外部キーアソシエーションを使用した1対1の関係

同じ例で、次の変更を行います。

StockDetail.javaで

    private Integer stockDetailsId;
    //with setter and getter
    //remove stockId and it's setter and getter

stock.hbm.xmlにあります

    <id name="stockId" type="java.lang.Integer">
                <column name="STOCK_ID" />
                <generator class="assigned" />
      </id>

StockDetail.hbm.xmlで

    <id name="stockDetailsId" type="java.lang.Integer">
                <column name="STOCK_DETAILS_ID" />
                <generator class="assigned"/>
     </id>
    <many-to-one name="stock" 

    class="com.test.common.Stock" column="STOCK_ID" />

hibernate.cfg.xmlで

    //this is optional property if you want to create database table's according to your hbm file's.

    <property name="hibernate.hbm2ddl.auto">create</property>
于 2013-05-30T06:23:20.663 に答える