小编Sha*_*ari的帖子

JPA/EntityManager是否提供了类似于Spring的RowMapper的机制

我正在致力于标准化遗留代码库和新开发,以使用 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)

感谢您的帮助。

java spring hibernate jpa entitymanager

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

entitymanager ×1

hibernate ×1

java ×1

jpa ×1

spring ×1