0

【このシナリオは説明用です】
私は特定の製品を持っており、各製品にコメントを付けることができます。コメントには、一般コメント(GC)と製品コメント(PC)の2種類があります。

サンプルテーブル

製品

ID名


1アップル

-

PRODUCT_COMMENTS

COMMENT_ID | コメント| COMMENT_TYPE


1 | IPHONEは良いです| PC

2 | IPAD LOOKS GOOD | GC

3 | 一般的なコメント| GC

4 | 製品コメント|PC

ProductテーブルからProduct_commentテーブルへの外部キーがあると想定します。

そして、これらのテーブルにマッピングするクラスがいくつかあります。

ProductクラスとProductCommentクラス

製品クラスは、ProductCommentクラスと1対5の関係にあります。

  public class Product {
     private Long id;

     private String productName;

     private List<ProductComments> productComments;

     private List<ProductComments> generalComments;

    .....

   }

今私の問題は、 コメントの2つの別々のリストがあります(comment_typeによって区別されます)。

私が言ったら

      Product p = (Product)session.load(Product.class, new Long(1));

generalCommentsとproductCommentsを正しくフェッチすることは可能ですか?上記の例では

generalCommentsリストには['IPADLOOKSGOOD'、'GENERAL COMMENT']が含まれ、productCommentsリストには['IPHONE IS GOOD'、'PRODUCTCOMMENT']が含まれている必要があります。

上記を実現するには、どのようなマッピングを行う必要がありますか?

編集 :

Hibernate 3.0およびhbmマッピングファイル(注釈ではない)を使用します。

4

2 に答える 2

2

@Whereアノテーションを使用します。SQL条件を指定して、選択する条件を制限できます。あなたの例では、大まかに次のようになります。

@Where(clause="COMMENT_TYPE = 'PC'")
private List<ProductComments> productComments;

@Where(clause="COMMENT_TYPE = 'GC'")
 private List<ProductComments> generalComments;

この制限値はデータベースからロードされますが、これらのリストに書き込まれる値ではないことに注意してください。これらのリストに書き込まれるコメントの種類は、プログラムロジック制御を介してまだあります。

于 2012-07-24T17:35:07.437 に答える
0

この場合、読みやすさと型の安全性のために継承を使用することを選択します。つまり、作成Comment.class GeneralComment.classしてProductComment.class。階層を処理するための2つの方法を選択できます。

  1. 実際の継承。各クラスは、PKによって結合された同等のテーブルを表します。
  2. オブジェクトの継承。判別Comment.class列を使用して、値を他の2つのエンティティに判別します。

Comment.class:_

<discriminator column="discriminator_column" type="discriminator_type" force="true|false" insert="true|false" formula="arbitrary sql expression" />

各サブクラス:

<subclass name="ClassName" discriminator-value="discriminator_value" proxy="ProxyInterface" lazy="true|false" dynamic-update="true|false" dynamic-insert="true|false" entity-name="EntityName" node="element-name" extends="SuperclassName"> <property .... /> ..... </subclass>

これで、コードは次のようになります。

public class Product {
 private Long id;

 private String productName;

 private List<ProductComments> productComments;

 private List<GeneralComments> generalComments;

.....

}

于 2012-07-27T07:39:26.250 に答える