【问题标题】:Why is Hibernate's EntityManager.persist() not throwing an exception?为什么 Hibernate 的 EntityManager.persist() 不抛出异常?
【发布时间】:2015-08-08 17:25:28
【问题描述】:

我无法弄清楚为什么在尝试将 20 个字符插入 10 字节的 oracle 表字段时没有看到异常...我确认对象中存在错误(太大的字符串),并且数据库确实显示 varchar2( 10).

这是代码(为简单起见,删除了额外的逻辑)

boolean isSuccess = false;
arrMyObject
for(int i = 0; i < arrMyObject.length; i++) {
    try {
        MyObject myObject = arrMyObject[i];
        em.persist(myObject);
        return true;
    } catch (Exception e) {
        System.out.println("Error");
        throw (e);
    }
}
return false;

我没有收到异常(期待一些 ORA 异常)。什么都没有打印出来,我在调用方法中收到了一个 TRUE 值。此外,没有任何东西被插入到表中,这是预期的。使用有效数据,我确认插入有效。

怎么了?

【问题讨论】:

  • 你在用什么交易?
  • @NeilStockton 我是 Hibernate 的新手,我不确定这是否是您要求的答案:
  • 没有。使用 EntityManager,您可以使用 LocalTransaction 执行操作(并使用 em.getTransaction().begin()/commit())或使用 JTA 事务。你需要知道你在使用什么
  • 好吧,好吧... JBossTransactionManagerLookup => 'JBoss AS 的 TransactionManagerLookup 查找策略。' => JTA 容器管理事务。
  • @NeilStockton,而且你混淆了两件事,本地/Jta 和容器/用户管理的事务

标签: java hibernate jpa exception entitymanager


【解决方案1】:

恕我直言,在您测试时,当前事务尚未提交,休眠会话尚未刷新,因此您没有访问数据库并且没有收到错误。尝试刷新休眠会话只是为了查看(不要让刷新调用在生产中)

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 2010-12-09
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多