我正在学习hibernate,并且遇到了异常--javax.persistence.PersistenceException 但我不明白这个的确切原因。 抛出此异常的场景是什么?
答案 0 :(得分:0)
PersistenceException是JPA中的运行时异常,可能在调用entityManager的DB操作时抛出。 find,persist,flush,lock,refresh等。此异常是以下异常的父级:
EntityExistsException,EntityNotFoundException,NonUniqueResultException,NoResultException,OptimisticLockException,RollbackException,TransactionRequiredException。
您可以使用PersistenceException来捕获上述任何异常 你的DAO课程。
答案 1 :(得分:0)
使用EntityManager进行数据库操作时会发生PersistenceException。
<强>方案:强>
EntityNotFoundException =&gt;实体不存在。例如。你在尝试 查找UserData但没有具有此类名称的表
NonUniqueResultException =&gt;由持久性提供程序抛出时
getSingleResult()在查询上执行,并且有多个
查询结果。
例如:em.getSingleResult()。但查询更多
超过1行
NoResultException =&gt;由持久性提供程序抛出时 执行Query.getSingleResult()或TypedQuery.getSingleResult() 一个查询,没有结果可以返回。
还有更多......
答案 2 :(得分:0)
如果从数据库表到 jpa 的数据类型不匹配,我会收到此错误 例如:在表中,日期数据类型(trandate)被指定为 varchar2,我将它分配给日期对象并尝试将日期转换为字符串。
@Transactional
public List<BulkTransferVwbulktransferAgent> getAgentList(String mode,String distributor) {
// TODO Auto-generated method stub
List<Object> query =null;
if (mode.equalsIgnoreCase("I") || mode.equalsIgnoreCase("O"))
{
query = (List<Object>)sessionFactory.getCurrentSession().createQuery("select a.agent,a.agentmnemonic,a.status,a.agentGroup from "
+ "BulkTransferVwbulktransferAgent a where a.status IS NULL and a.distributor =:p_distributor")
.setParameter("p_distributor", distributor).list();
}
List<BulkTransferVwbulktransferAgent> list= new ArrayList<BulkTransferVwbulktransferAgent>();
for (Iterator it = query.iterator(); it.hasNext(); ) {
BulkTransferVwbulktransferAgent vwbulktransferAgent = new BulkTransferVwbulktransferAgent();
Object[] myResult = (Object[]) it.next();
String agent = (String) myResult[0];
String agentmnemonic = (String) myResult[1];
String status = (String) myResult[2];
String agentGroup = (String) myResult[3];
vwbulktransferAgent.setAgent(agent);
vwbulktransferAgent.setAgentmnemonic(agentmnemonic);
vwbulktransferAgent.setStatus(status);
vwbulktransferAgent.setAgentGroup(agentGroup);
list.add(vwbulktransferAgent);
}
return list;
}
对于我第一次发布答案的对齐方式感到抱歉,如果有误请指导我..