关于以下示例,是否有可能将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();

最佳答案

如果需要返回一些字段,也可以选择它们并使用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();


JPA实现将查找Sample构造函数(路径必须完整),并在转换结果时调用它。避免返回数据库必须返回的所有内容非常方便(以创建表示结果的新类为代价):

09-08 07:08