0

JPAを使用して次の選択を実行したい:

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 デバッガーが停止しているように見えます。この時点では、このスクリーン ショットに示すように、実行を一時停止または停止することしかできません。

ここに画像の説明を入力

これはどういう意味ですか?これは上記のクエリの有効な表現ではありませんか?

4

1 に答える 1

0

データベースが別のマシン上のSybaseInteractiveSQLによってロックされていたため、クエリの実行中にHibernateが停止していました。Hibernateは、リソースの競合が発生したときに単にストールするのではなく、ある種の例外をスローすると思うかもしれませんが、そうではないと思います。

于 2012-07-16T15:28:02.143 に答える