我编写类来使用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请帮帮我
答案 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));