Where to place @SqlResultSetMapping in case of @ConstructorResult

不想你离开。 提交于 2019-12-10 02:58:52

问题


I'm trying to map a non-entity pojo with the createNativeQuery method of entityManager of jpa. By using something like this

@SqlResultSetMapping(name="ResultMapping", 
classes={
@ConstructorResult(
     targetClass=Employee.class,
       columns={
          @ColumnResult(name="empID", type=Long.class),
          @ColumnResult(name="empName", type=String.class),
          }
   )
}
)
public class Loader{
 private EntityManager em;

 public void load(){

   Query query = em.createNativeQuery("select empID, empName from employee",  "ResultMapping");
   List<Employee> = query.getResultList();
 }

}

public class Employee{

 private long empID;
 private String empName;
 public Employee(long empid, String empname)
 {
     this.empID = empid;
     this.empName = empname;
 }
}

I getting unknown SqlResultSetMapping ResultMapping error Where I am supposed to put SqlResultSetMapping so that the entityManager will able to recognize it?


回答1:


Where I am supposed to put SqlResultSetMapping so that the entityManager will able to recognize it?

As far as I can see it varies from a persistence provider:

  • EclipseLink: put it at any class in the classpath
  • Hibernate: put it at any class annotated with @Entity; in fact I am able to reproduce the error when I put it elsewhere:

    org.hibernate.MappingException: Unknown SqlResultSetMapping [ResultMapping]
    

Tested with EclipseLink 2.5.2, Hibernate 4.3.8.Final


In general to make your application portable across JPA providers it would be the best to put SqlResultSetMapping at any entity class.



来源:https://stackoverflow.com/questions/29636004/where-to-place-sqlresultsetmapping-in-case-of-constructorresult

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!