Java 选择具有JPA的非实体?

Java 选择具有JPA的非实体?,java,jpa,Java,Jpa,JPA是否可以使用本机查询检索非实体类的实例? 我有一个非实体类,它包含两个实体: class Wrap{ Entity1 ent1; Entity2 ent2 } @Entity class Entity1{ ... } @Entity class Entity2{ ... } 我怎么能做那样的事 Query q = entityManager.createNativeQuery("native select here"); List<Wrap> list = q

JPA是否可以使用本机查询检索非实体类的实例? 我有一个非实体类,它包含两个实体:

class Wrap{
  Entity1 ent1;
  Entity2 ent2
}
@Entity
class Entity1{
  ...
}
@Entity
class Entity2{
  ...
}
我怎么能做那样的事

Query q = entityManager.createNativeQuery("native select here");
List<Wrap> list = q.getResultList();
JPA是否可以使用本机查询检索非实体类的实例

不可以。只有通过将resultClass或resultSetMapping传递给该方法,本机查询才能返回实体;如果不这样做,您将获得原始数据的集合


在JPQL中,您可以使用构造函数表达式选择新建。。。使用非实体构造函数。但是本机查询不支持此操作,您必须手动执行此操作

我想我找到了解决办法。 有一种方法可以在构造查询时使用NEW关键字。 我是如何解决这个问题的:

    public List<ProductType> getProductByName(String productName) {
        String sqlQuery = "select DISTINCT **NEW** project1.ProductType(o.name, o.revision) from Lhproduct o where o.name = :prodname";
        Query qry = getEntityManager().**createQuery(sqlQuery);**
        qry.setParameter("prodname",productName);
        return qry.getResultList();
 }
ProductType是一个非实体对象,一个实现Serialiable的简单普通对象。但是您需要定义适当的构造函数

快乐编码:-

感谢和问候,
Hari

但Redfield要求在本机查询中使用运算符NEW!不是jpa查询。因此,可以将该查询用作CreateNativeQueryTank,但这不是本机查询的答案。我的SQL如下所示:从公司c中选择新的com.company.ui.EntityIDKeyc.companyId、c.name,其中c.companyId不为null,c.name不为null,lengthtrimc.name>0按c.name asc排序,我的JPA代码为:List companys=getEntityManager.createQuerysql.getResultList;但我最后得到了一个类型安全警告。我如何避免这种情况?