我有一段这样的代码:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Offer> query = cb.createQuery(Offer.class);
Root<Offer> root = query.from(Offer.class);
query = query.select(root).where(cb.equal(root.get(Offer_.companyID), company.getId()));
return em.createQuery(query).getResultList()
现在,这看起来很漂亮,但它给我带来了问题。 Offer.companyID 和 company.id 都很长。
这是日志向我显示 hibernate 正在执行的操作:
Hibernate: SELECT C.id FROM company C INNER JOIN company_operators cm
ON cm.company_id = c.id WHERE cm.operators_id = '503'
这是我得到的错误:
12:47:00,581 ERROR [org.jboss.ejb3.invocation] (http--0.0.0.0-9080-5) JBAS014134: EJB Invocation failed on component OfferRepository for method public java.util.List org.jboss.tools.example.richfaces.data.OfferRepository.getOffersbyMemberId(java.lang.Long) throws java.lang.Exception: javax.ejb.EJBException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
这可能是什么问题?
最佳答案
嗯,我想我已经找到答案了。
我所显示的代码上方有一行
Company company = companyRepo.getUsersCompany(memberId);
因此,我的查询中的company.getId()是从postgresql获取公司实体。在此过程中,它将 id 隐式转换为“BigInteger”。
所以我要做的就是显式转换为 Long,现在我的方法如下所示:
Company company = companyRepo.getUsersCompany(memberId);
if (company == null) return null;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Offer> query = cb.createQuery(Offer.class);
Root<Offer> root = query.from(Offer.class);
Long companyId = company.getId();
query = query.select(root).where(cb.equal(root.get(Offer_.companyID), companyId));
return em.createQuery(query).getResultList();
关于java - JPA BigInteger 和 Long 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929979/