我正在致力于标准化遗留代码库和新开发,以使用 EntityManager 进行持久化。然而,为了取得成功,我需要提供突破本机 SQL 并手动处理结果的能力。JPA EntityManager 几乎通过以下方式提供此功能:
em.createNativeQuery("select ... from my_table where ...");
Run Code Online (Sandbox Code Playgroud)
但我缺少的是执行 Spring 风格的 RowMappers 的能力。我可以看到有一些接近的机制。我当然可以使用注释、xml 等来映射实体,但我需要将代码放入结果集中每一行的处理中,因此这不是一个选项。我可以看到我可以传入 SQLResultSetMapping,但据我所知,这再次仅支持元数据映射。理想情况下,我需要的是以下内容:
em.createNativeQuery("select ... from my_table where ...",
new RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
MyObject o = new MyObject();
o.setMyCustomProperty( rs.get...() );
//...
return b;
}
}
);
Run Code Online (Sandbox Code Playgroud)
与上述等价的存在吗?我可以构造一个 SQLResultSetMapping 来完全控制上面的映射吗?
如果没有,我至少可以以标准方式获取 EM 底层的数据源,以便我可以使用 JdbcTemplate 包装它,并且没有两个路径来配置数据源吗?
DataSource ds = em.getDataSource();
JdbcTemplate t = new JdbcTemplate(ds);
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助。