1

休止状態のエンティティにマップされるDBテーブルがあります。これまでのところすべてがうまくいきます...

ただし、必要なのは、「distinct(fieldA、fieldB)」のように、特定の基準を満たすエンティティのみをマップすることです。

HibernateおよびHibernateアノテーションを使用してマッピングすることは可能ですか?どうすればいいですか?@Filterで?

4

4 に答える 4

1

@Where注釈を使用することをお勧めします。このアノテーションは、コレクションの要素エンティティまたはターゲットエンティティで使用できます。sqlで記述された句属性を指定します。これは、休止状態がそのエンティティで実行するすべての選択に適用されます。それは非常に使いやすく、非常に読みやすいです。

これが例です。

@Entity
//I am only interested in Donuts that have NOT been eaten
@Where(clause = "EATEN_YN = 'N'")
public class Donut {

  @Column(name = "FILLING")
  private String filling;

  @Column(name = "GLAZED")
  private boolean glazed = true;

  @Column(name = "EATEN_YN")
  private boolean eaten = false;

...

}
于 2009-11-04T20:49:02.913 に答える
0
  1. ビューを作成してから、そのビューをエンティティにマップできます。

    create view my_data as
    select ... from ...
    
    @Entity(table="my_data")
    public class MyData { ... }
    
  2. 1つのオプションは、テーブルを通常どおりにマップすることです。その後、クエリまたはフィルターを介して常にエンティティをフェッチできます。

  3. ネイティブSQLクエリを作成し、結果にエンティティをマッピングすることもできます。

    Query q = sess.createSQLQuery("SELECT DISTINCT fieldA, fieldB FROM some_table")
              .addEntity(MyEntity.class);
    List<MyEntity> cats = q.list();
    
  4. このタイプのHQLクエリにDISTINCTを追加することも可能かもしれません:

    select new Family(mother, mate, offspr)
    from DomesticCat as mother
    join mother.mate as mate
    left join mother.kittens as offspr
    

メソッド1、3、および4は、読み取り専用のマッピングを作成します。

使用している基準について具体的に教えてください。Hibernateクエリまたはフィルターですべてを実行できるわけではないため、ビューアプローチはより一般的です。

于 2009-11-02T17:58:56.143 に答える
0

おそらく、フィールドとそれらが統計化する必要がある条件をカプセル化する新しいPojoを作成できます。次に、そのクラスを「カスタムユーザー定義型」にして、Hibernateがその「型」をマッピングするために指定したマッピングクラスを使用する必要があるようにします。

于 2009-11-02T19:10:31.990 に答える
0

Juhaが言及したオプションに加えて、NamedNativeQueryおよびSqlResultSetMappingアノテーションを使用して、SQLクエリから直接オブジェクトを作成することもできます。

@Entity
@SqlResultSetMapping(name = "compositekey", entities = 
  @EntityResult(entityClass = MiniBar.class, 
    fields = { @FieldResult(name = "miniBar", column = "BAR_ID"), })
)
@NamedNativeQuery(name = "compositekey", 
   query = "select BAR_ID from BAR", resultSetMapping = "compositekey")
@Table(name = "BAR")
public class Bar {

SQLクエリを好みに合わせてフレーバーを設定する

于 2009-11-03T01:42:15.157 に答える