【问题标题】:Write a Hibernate or JPA native SQL on two flat tables在两个平面表上编写 Hibernate 或 JPA 原生 SQL
【发布时间】:2014-02-21 19:27:08
【问题描述】:

我有两张平桌。他们之间没有任何关系。我必须使用 JPA 或 Hibernate 并使用 hql 或本机 sql 查询从这些表中检索数据。此查询是存储过程的一部分。所以,我的另一个选择是调用这个引用游标存储过程并检索数据。

这是我的问题。

/ * GET ALL THE COLUMNS FROM T2 */
SELECT 
     T2.*    
    FROM TABLE1 T1, TABLE2 T2
    WHERE T1.USERID = 'TESTUSER'    AND T2.GROUP_CAT IN (
    T1.GROUPCAT1,T1.GROUPCAT2,T1.GROUPCAT3,T1.GROUPCAT4, T1.GROUPCAT5)

如何在 Hibernate 或 JPA 中编写检索数据?

【问题讨论】:

  • 我更喜欢 Criteria,更喜欢类型安全

标签: java sql hibernate jpa stored-procedures


【解决方案1】:
  1. 为表 T2 创建休眠实体 (T2Entity)。
  2. 为实体 T2 创建一个 DAO,我们将其称为 T2Dao,它继承自通用 Dao。
  3. 使用以下注解将实体管理器注入通用 Dao:

    @PersistenceContext
    EntityManager entityManager;
    

    它有实体管理器的setter和getter方法。

  4. 在 T2Dao 中,定义如下方法(使用 JPA):

    公开列表 findT2Entities() {

    String nativeSQL = "SELECT T2.* FROM TABLE1 T1, TABLE2 T2 WHERE T1.USERID = 'TESTUSER'    AND T2.GROUP_CAT IN (T1.GROUPCAT1,T1.GROUPCAT2,T1.GROUPCAT3,T1.GROUPCAT4, T1.GROUPCAT5)";
    
    Query q=this.getEntityManager().createNativeQuery(nativeSQL,T2Entity.class);
    
    try{
        List<T2Entity> t2EntityList  = (List<T2Entity>) q.getResultList();
        return t2EntityList;
    }catch(NoResultException e){
        return null;
    }
    

    }

  5. 为获得更好的性能,请在数据库中索引 T1.USERID、T2.GROUP_CAT 等列;确保 nativeSQL 不对表进行顺序扫描。

您可以根据您的用例进行其他优化。

【讨论】:

  • 谢谢巴拉吉!我正在使用会话工厂。这是我想出的。 List list = sessionFactory.getCurrentSession().createQuery("from com.abc.Usergroup UG, User U where U.loginid =? and UG.userGroup in (U.usergroup1, U.usergroup2, U.usergroup3, U.usergroup4, U.usergroup5, U.usergroup6, U.usergroup7, U.usergroup8)") .setParameter(0, userId).list(); 它返回两个表。我只需要第二个;正在努力。
  • @Superman9999,您在查询中缺少选择子句。连接两个表后,您将选择连接结果集的所有列。添加选择子句并列出您需要的列(从com.abc.Usergroup UG中选择用户,用户U ....)参考链接:docs.jboss.org/hibernate/orm/3.3/reference/en/html/…tutorialspoint.com/hibernate/hibernate_query_language.htm
  • 对不起,我想了一会儿,没有机会来这里更新线程。我用select UG from.... 得到我想要的。谢谢你的帮助!!
猜你喜欢
  • 2013-04-04
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 2012-07-05
  • 2012-04-22
  • 2012-07-15
相关资源
最近更新 更多