什么时候抛出异常javax.persistence.PersistenceException

时间:2018-03-16 14:22:16

标签: database hibernate

我正在学习hibernate,并且遇到了异常--javax.persistence.PersistenceException 但我不明白这个的确切原因。 抛出此异常的场景是什么?

3 个答案:

答案 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() 一个查询,没有结果可以返回。

还有更多......

https://docs.oracle.com/cd/E17802_01/products/products/persistence/javadoc-1_0-fr/javax/persistence/PersistenceException.html

答案 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;
    }

对于我第一次发布答案的对齐方式感到抱歉,如果有误请指导我..