3 回答
TA贡献1893条经验 获得超10个赞
我认为最简单的方法是使用所谓的投影。它可以将查询结果映射到接口。使用SqlResultSetMapping不方便,并使您的代码难看:)。
来自spring数据JPA源代码的一个示例:
public interface UserRepository extends JpaRepository<User, Integer> {
@Query(value = "SELECT firstname, lastname FROM SD_User WHERE id = ?1", nativeQuery = true)
NameOnly findByNativeQuery(Integer id);
public static interface NameOnly {
String getFirstname();
String getLastname();
}
}
您也可以使用此方法获取投影列表。
请查看此春季数据JPA文档条目,以获取有关预测的更多信息。
注1:
请记住,将您的User实体定义为普通对象-投影接口中的字段必须与该实体中的字段匹配。否则,字段映射可能会损坏(getFirstname()可能返回姓氏等的值)。
笔记2:
如果使用SELECT table.column ...符号,请始终定义与实体名称匹配的别名。例如,此代码将无法正常工作(投影将为每个getter返回null):
@Query(value = "SELECT user.firstname, user.lastname FROM SD_User user WHERE id = ?1", nativeQuery = true)
NameOnly findByNativeQuery(Integer id);
但这很好用:
@Query(value = "SELECT user.firstname AS firstname, user.lastname AS lastname FROM SD_User user WHERE id = ?1", nativeQuery = true)
NameOnly findByNativeQuery(Integer id);
在更复杂的查询的情况下,我宁愿使用JdbcTemplate自定义存储库。
- 3 回答
- 0 关注
- 1336 浏览
添加回答
举报