0

次の例について、AnsweredQuestionインスタンスのリストをQuestionのオブジェクトとして取得することはできますか?

@MappedSuperclass
public abstract class Question{
  @Column(name="TITLE")
  private String title;
  ...
}

@Entity
@Table(name="ANSWEREDQUESTION")
public class AnsweredQuestion extends Question
{
  @Column(name="ANSWER")
  private String answer;
  ...
}

子孫クラスには多くの列があるため、少数の列のみを取得することが非常に重要です。次のように試しましたが、それでもAnsweredQuestionのリストが返されます:

queryStr = " select q from AnsweredQuestion q where ..."
TypedQuery<Question> query = entityManager.createQuery(queryStr, Question.class);
return query.setParameter( ... ).getResultList();
4

1 に答える 1

2

いくつかのフィールドを返す必要がある場合は、それらを選択してnew演算子を使用することもできます。

TypedQuery<Sample> query = entityManager.createQuery("select new com.acme.sample.Sample(e.fieldA, e.fieldB) from  AnsweredQuestion e", Sample.class);
return query.setParameter( ... ).getResultList();

SampleJPA 実装は、コンストラクター (パスが完全である必要があります)を探し、結果の変換中にそれを呼び出します。データベースが返さなければならないすべてのものを返さないようにすることは、(結果を表す新しいクラスを作成するという代償を払って) 非常に便利です:)

于 2014-10-05T19:25:13.287 に答える