【问题标题】:Migrate JDBC ResultSet to JPA List object将 JDBC ResultSet 迁移到 JPA List 对象
【发布时间】:2017-06-28 20:34:20
【问题描述】:

您好,我需要将我的 DAO 类从 JDBC 迁移到 JPA,但我需要的是不需要更改 rs.getInt("NAME_COLUMN")rs.getString("NAME_COLUMN")

其余代码PreparedStatement / while(rs.next()){....} 很容易迁移...我只需要结果集变量...

JDBC 代码

PreparedStatement ps = connection.prepareStatement("SELECT f1, f2 FROM table");
ResultSet rs = ps.executeQuery();
while (rs.next()) {

    System.out.println(rs.getInt("f1"));
    System.out.println(rs.getString("f2"));
    // More than 800 of this... 
}

JPA 代码

EntityManager em = PersistenceUtil.getEntityManager();

Query q = em.createNativeQuery("SELECT f1, f2 FROM table");
List<Object[]> results = q.getResultList();

for (Object[] rs : results) {
     System.out.println(rs[0]); // need to be rs.getInt("f1")
     System.out.println(rs[1]); // need to be rs.getString("f2")
}          

我的项目中有很多 ResultSet 超过 800 个

我需要一个方法/类/东西来仅迁移结果集变量(内部为),如果我写在rs[0] 中,我将花费大量工作来重新编写我在 JPA 中的所有结果集。

【问题讨论】:

  • 您有很多请求的桌子?或者您在实际查询中经常使用相同的表?
  • 如果你有很多这样的东西,那么为什么还要麻烦 JPA?此外,您在应用程序中使用 JPA 并不意味着您必须在任何地方都使用它?
  • JPA 的最大好处是您可以抽象出数据库并将事物建模为实体,并让框架为您生成查询。如果您无论如何都打算编写本机查询,那么这似乎没有多大意义。
  • 我们的用例显然不是 JPA 最合适的选择,但如果您别无选择,我已经为您提供了一种使用本机查询简化映射的方法。
  • 您能否切换您的 ResultSet 转换器以返回“Object[]”以外的内容?休眠可以:stackoverflow.com/questions/2605385/…

标签: java jpa jdbc


【解决方案1】:

这就是答案

    EntityManager em = PersistenceUtil.getEntityManager();

    Query q  = em.createNativeQuery("SELECT f1, f2 FROM table");
    q.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
    List<Map> lm = q.getResultList();

        for (Map rs : lm) {

            System.out.println(rs.get("f1")); // add some function convert to Int
            System.out.println(rs.get("f2")); // add some function convert to string


        }

任何人都知道任何转换字符串和 Int 的函数吗?

喜欢:getInt 还是 getString?

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2014-11-02
    • 1970-01-01
    • 2011-02-25
    • 2014-03-05
    相关资源
    最近更新 更多