问题
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