12

汎用テーブル「Sample」でクエリを作成しています。このテーブル「SampleOne」、「SampleTwo」から継承するいくつかのタイプがあります。次のようなクエリが必要です。

select s from Sample where s.type = :type

ここで、type はテーブルの識別子の値です。何らかの方法で可能ですか (SampleOne、SampleTwo ごとに 1 つずつ、エンティティ固有のクエリを作成することは避けてください)。

このトピックへのご意見をお待ちしております。

よろしく、P.

4

4 に答える 4

15

JPA 2.0 では、式を使用できますTYPE(ただし、現在、Hibernate のパラメーターでは機能しません。 HHH-5282を参照してください)。

select s from Sample s where TYPE(s) = :type

同様の Hibernate 固有の式は.class次のとおりです。

select s from Sample s where s.class = :type
于 2011-02-03T09:30:11.543 に答える
4

Java EE 6 チュートリアルの関連セクションは次のとおりです。

抽象エンティティ

クラスを で装飾することにより、抽象クラスをエンティティとして宣言できます@Entity。抽象エンティティは具象エンティティに似ていますが、インスタンス化することはできません。

抽象的なエンティティは、具体的なエンティティと同じようにクエリできます。抽象エンティティがクエリのターゲットである場合、クエリは抽象エンティティのすべての具象サブクラスで動作します。

@Entity
public abstract class Employee {
    @Id
    protected Integer employeeId;
    ...
}
@Entity
public class FullTimeEmployee extends Employee {
    protected Integer salary;
    ...
}
@Entity
public class PartTimeEmployee extends Employee {
    protected Float hourlyWage;
}

私がこれを正しく読んだ場合、あなたの質問:

select s from Sample where s.type = :type

が識別子列である場合は、指定されたサブタイプの要素のみを返す必要typeがあるため、あとは結果リストを要求されたサブタイプにキャストするだけです。

于 2011-02-03T09:27:15.837 に答える