2问题
在本机SQL使用本机SQL :)
@Query(值=“SELECT页。 * FROM test p“,nativeQuery = true)
您的本机查询返回Object []或Object []的列表。
如果您向EntityManager提供其他映射信息,则可以更改该设置。
通过这样做,您可以告诉EntityManager将结果映射到受管实体,特定类型或POJO的标量值。
将本机查询的结果映射到托管实体的最简单方法是选择实体的所有属性,并将其作为参数提供给createNativeQuery方法。
(抱歉使用其他实施例)
Query q = em.createNativeQuery("SELECT a.id, a.version, a.firstname, a.lastname FROM Author a", Author.class);
List<Author> authors = q.getResultList();
所有其他映射,如下面的其中一个所述查询结果映射到POJO,需要被定义为SQLResultSetMappings。
@SqlResultSetMapping(
name = "AuthorValueMapping",
classes = @ConstructorResult(
targetClass = AuthorValue.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "firstname"),
@ColumnResult(name = "lastname"),
@ColumnResult(name = "numBooks", type = Long.class)}))
要使用此映射,您需要提供映射的名称作为createNativeQuery方法的参数。
Query q = em.createNativeQuery("SELECT a.id, a.firstname, a.lastname, count(b.id) as numBooks FROM Author a JOIN BookAuthor ba on a.id = ba.authorid JOIN Book b ON b.id = ba.bookid GROUP BY a.id", "AuthorValueMapping");
List<AuthorValue> authors = q.getResultList();