我有两张平板 table 。他们之间没有关系。我必须使用 JPA 或 Hibernate,并使用 hql 或 native 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 中编写检索数据?
最佳答案
- 为表 T2 创建 hibernate 实体 (T2Entity)。
- 为实体T2创建一个DAO,我们将其命名为T2Dao,它继承自通用Dao。
实体管理器使用以下注释注入(inject)到通用 Dao 中:
@PersistenceContext EntityManager entityManager;
它有entityManager的setter和getter方法。
在T2Dao中,定义如下方法(使用JPA):
公共(public)列表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; }
}
为了获得更好的性能,请在数据库中对T1.USERID、T2.GROUP_CAT等列建立索引;确保nativeSQL不对表进行顺序扫描。
您可以根据您的用例进行其他优化。
关于java - 在两个平面表上编写 Hibernate 或 JPA native SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943459/