JPA - 是否可以将结果作为@MappedSuperclass的实例获取?

时间:2014-10-05 19:16:40

标签: java hibernate jpa entitymanager mappedsuperclass

关于以下示例,是否可以将 AnsweredQuestion 实例的列表检索为问题的对象?

@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();

1 个答案:

答案 0 :(得分: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();

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