【发布时间】:2012-05-17 08:51:29
【问题描述】:
我目前正在测试我在 spring 中创建的数据访问层(注入了 PersistenceContext)。所以我有一个无状态的 EJB,它调用一个服务,例如 UserService,在数据库中插入/删除/更新数据。
服务运行良好,我能够插入数据库。但是当我在测试时,我输入的字符串值比我得到的设定长度长:
javax.transaction.RollbackException: Transaction marked for rollback.
WARNING: DTX5014: Caught exception in beforeCompletion() callback:
javax.persistence.PersistenceException: org.hibernate.exception.DataException: ERROR: value too long for type character varying(20)
Caused by: org.hibernate.exception.DataException: ERROR: value too long for type character varying(20)
Caused by: org.hibernate.exception.DataException: ERROR: value too long for type character varying(20)
我的部分代码:
@PersistenceContext
protected EntityManager entityManager;
try {
entityManager.persist(e);
} catch(Exception e) {
//log message here
}
然后我尝试了一切来捕捉这些错误,但我无法做到。关于如何解决问题的任何建议?
谢谢,
切苏亚
【问题讨论】:
-
I was not able to 不是我以前见过的错误消息。究竟是什么不起作用。向我们展示您尝试捕获错误的代码并解释为什么您“*无法”捕获它。
-
代码就在那里:entityManager.persist(e),问题是我插入的值对于字段来说太长,例如 name(5),然后我插入 namenamename。即使我用 try/catch 封装了 persist() 方法,它也无法捕捉到错误。
-
我仍然没有在您的代码中看到任何 try/catch。而且你仍然没有解释为什么你不能抓住它。
-
我添加了 try catch 块。它只是简单地包装了 persists 方法。
-
我只是简单地调用 entityManager 的 persist 方法,该方法在参数正确时起作用,但是当数据字段的值太长时,它会按预期抛出错误。但问题是我无法在代码中捕捉到它。也许提交是由容器延迟调用的。
标签: spring hibernate postgresql plpgsql