spring数据我想用hibernate查询

时间:2017-02-08 08:12:23

标签: java hibernate session spring-data-jpa

我编写类来使用hibernate查询获取数据。当我从EntityManager使用

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

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

和会话agin要求将会话转换为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;

    }

}

它得到错误,

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

如果有人知道如何在spring数据中使用hibernate查询jpa请帮帮我

1 个答案:

答案 0 :(得分:0)

由于持久属性orgId2的类型是Long,所以对应的 创建ParameterExpression时,type参数也应为Long。因此,因为ParameterExpression的类型是Long,所以参数值的类型也应该是Long。因此,在设置查询参数时,请执行以下更改。

而不是您当前的行,如下面的

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

如下所示进行更改

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