Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where to place @SqlResultSetMapping in case of @ConstructorResult

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?

like image 862
Shailendrasingh Patil Avatar asked Apr 14 '15 19:04

Shailendrasingh Patil


1 Answers

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.

like image 75
wypieprz Avatar answered Oct 07 '22 20:10

wypieprz