1

我在启动时使用@PostConstruct注释执行一个方法。此方法必须检查存储在 DB 表中的值。如果它不存在,那么它必须插入它。对 DB 中的值的检查是正确完成的,但是如果我必须坚持它,它不会将它写入 DB。它不会抛出任何异常并且persist()(显然)没有问题地执行,只有值没有插入到 DB 中。

此外,一旦一切就绪,如果我手动调用该方法(例如从控制器),它将正确插入值。

@PostConstruct
public void insertIfNecessary()
{
   Request r = Request.findRequestForUser(this.me);
   if ( r == null )
   {
      r = new Request();
      r.setOwner(this.me);
      r.persist();
   }
}

你知道可能出了什么问题吗?

最好的问候,米格尔

4

1 回答 1

1

确保事务已提交,而不是回滚。

在方法中添加@Transactional


添加:

第二件事应该确保@Transactional(readonly=false)考虑到注释!如果您使用 Spring Proxy AOP(而不是 AspectJ),那么这意味着使用@Transactional(readonly=false)必须 bean 注释的方法(直接)从其他 bean 调用。

于 2012-01-18T07:54:41.077 回答