如果是 @ConstructorResult,@SqlResultSetMapping 应该放在哪里

2024-05-16

我正在尝试使用jpa的entityManager的createNativeQuery方法映射非实体pojo。通过使用这样的东西

@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;
 }
}

我得到unknown SqlResultSetMapping ResultMapping错误 我应该将 SqlResultSetMapping 放在哪里以便实体管理器能够识别它?


我应该将 SqlResultSetMapping 放在哪里以便实体管理器能够识别它?

据我所知,它与持久性提供者有所不同:

  • EclipseLink:将其放在类路径中的任何类中
  • 休眠:将其放在任何用@Entity注释的类中;事实上,当我把它放在其他地方时,我能够重现该错误:

    org.hibernate.MappingException: Unknown SqlResultSetMapping [ResultMapping]
    

使用 EclipseLink 2.5.2、Hibernate 4.3.8.Final 进行测试


一般来说,为了使您的应用程序能够跨 JPA 提供程序移植,最好将 SqlResultSetMapping 放在任何实体类中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果是 @ConstructorResult,@SqlResultSetMapping 应该放在哪里 的相关文章

随机推荐