2017-02-08 3 views
0

Ich schreibe Klasse, Daten mit Hibernate Abfrage abzurufen. wenn ich Session von EntityManagerFederdaten, die ich Hibernate Abfrage verwenden möchte

Session session=null; 
    sessionFactory=entityManager.unwrap(SessionFactory.class); 
    session=(Session) sessionFactory.getCurrentSession(); 

oder

Session session = (Session) entityManager.getDelegate(); 

und Sitzungs agin mit werfen fragen die Sitzung in EntityManager

public class BranchCustomRepositoryImpl implements BranchCustomRepository{ 

    @PersistenceContext 
     private EntityManager entityManager; 

    private SessionFactory sessionFactory; 



    public Branch findByOrgOrgIdAndBranchId(String orgId, String branchId) { 
    //Session session=null; 
    //sessionFactory=entityManager.unwrap(SessionFactory.class); 
    //session=(Session) sessionFactory.getCurrentSession(); 

     Session session = (Session) entityManager.getDelegate(); 
     System.out.println("BranchCustomRepositoryImpl"); 
     Long orgId2=Long.valueOf(orgId); 
     Long branchId2=Long.valueOf(branchId); 
     try{ 
     Query query= (Query)((EntityManager) session).createQuery("from Branch b where b.org.orgId=:orgId AND b.branchId=:branchId");  
     query.setParameter("orgId", orgId2); 
     query.setParameter("branchId", branchId2);  
     return (Branch) query.uniqueResult(); 
     }catch(Exception e){ 
      System.out.println("Exception"+e.toString()); 
     }finally{ 
      try { 
       if(session!=null){ 
       session.close(); 
       System.out.println("session closed"); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     return null; 

    } 

} 

es immer Fehler wie,

java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Long (n/a)] 

ob Irgendwelche wissen, wie man Hibernate Query im Frühjahr Daten jpa verwenden Sie mir bitte

+0

Sie haben eine Abfrage, die perfekt ausdrückbar ist mit JPQL so keine Notwendigkeit, „Hibernate API“ verwenden –

Antwort

0

Da der Typ des persistenten Attributs orgId2 Long ist, sollte das entsprechende Argument auch Long sein, während die ParameterExpression erstellen. Da Typ der ParameterExpression Long ist, sollte der Typ des Parameterwerts auch Long sein. Ändern Sie die folgenden Einstellungen, wenn Sie Abfrageparameter festlegen.

Statt Ihre Stromleitungen wie unten

query.setParameter("orgId", orgId2); 
    query.setParameter("branchId", branchId2); 

ändern, wie es unter

query.setParameter("orgId", Long.valueOf(orgId2)); 
    query.setParameter("branchId", Long.valueOf(branchId2)); 
+0

keine orgId2- und brancgId2-Werte nur in long –

Verwandte Themen