2012-07-13 41 views
0

時失速我想執行下列選擇使用JPA:休眠試圖執行JPA查詢Sybase上

select * from permissions_table where permissions.role in ("Role1", "Role2") 

我到目前爲止是這樣的:

 protected Set<String> getPermissions(Connection conn, String username, Collection<String> roleNames) throws SQLException { 
      PreparedStatement ps = null; 
      Set<String> permissions = new LinkedHashSet<String>(); 
      try {                   

       EntityManager em = entityManagerFactory.createEntityManager();         
       CriteriaBuilder builder = em.getCriteriaBuilder(); 
       CriteriaQuery<HierarchicalPermission> criteria = builder.createQuery(HierarchicalPermission.class); 
       Root<HierarchicalPermission> permission = criteria.from(HierarchicalPermission.class); 
       criteria.select(permission).where(permission.get("Role").in(roleNames)); 
       List<HierarchicalPermission> hPermissions = em.createQuery(criteria).getResultList(); 
       for (HierarchicalPermission p : hPermissions) { 
        System.out.println("Permission (" + p.getRole() +")"); 
       } 

} 
     catch(Exception ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 
     finally { 
      JdbcUtils.closeStatement(ps); 
     } 

     return permissions; 
    } 

當我跨過這條線:

List<HierarchicalPermission> hPermissions = em.createQuery(criteria).getResultList(); 

我看到我的Eclipse輸出窗口如下:

Hibernate: select hierarchic0_.iIdentity as iIdentity0_, hierarchic0_.timestamp as timestamp0_, hierarchic0_.szRole as szRole0_, hierarchic0_.szDescription as szDescri4_0_, hierarchic0_.iResource as iResource0_ from occ.ROLE_PERMISSIONS hierarchic0_ where hierarchic0_.szRole in (?) 

和Eclipse調試器似乎失速。此時,我只能暫停或停止執行,如此屏幕截圖所示。

enter image description here

這是什麼意思?這不是上述查詢的有效表示嗎?

+0

那麼,這是一個日食調試問題?當你使用Run配置而不是使用Debug配置來執行它時會發生什麼? – 2012-07-13 22:30:20

+0

同樣的效果。我看到「Hibernate:select hierarchyic0_.iIdentity as iIdentity0_,hierarchic0_.timestamp as timestamp0_,hierarchic0_.szRole as szRole0_,hierarchic0_.szDescription as szDescri4_0_,hierarchic0_.iResource as iResource0_ from occ.ROLE_PERMISSIONS hierarchic0_ where hierarchyic0_.szRole in(?)」in輸出窗口和執行似乎已停止。 – 2012-07-16 14:41:42

回答

0

數據庫被另一臺機器上的Sybase Interactive SQL鎖定,所以Hibernate在試圖執行查詢時停滯不前。人們會認爲Hibernate會拋出某種異常,而不是在遇到資源爭奪時拖延,但我想不是這種情況。