2012-01-18 66 views
1

我在启动时使用@PostConstruct注释执行方法。该方法必须检查存储在数据库表中的值。如果它不存在,那么它必须插入它。检查数据库中的值是正确的,但是如果我必须坚持它,它不会将它写入数据库。它不会抛出任何异常,并且persist()被执行(显然)没有问题,只有值不被插入到数据库中。此外,一旦一切都结束,如果我手动调用该方法(例如从控制器),它会正确插入值。Spring + JPA + Hibernate:启动时没有插入

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

你知道什么可能是错的吗?

最好的问候,米格尔

回答

1

确保该交易将提交,不会回退。

添加@Transactional的方法


补充:

的第二件事应该确保的是,@Transactional(readonly=false)注释采取的帐户!如果使用Spring代理AOP(不是AspectJ),那么这意味着用@Transactional(readonly=false)注释的方法必须从其他bean调用(直接)调用。

+0

我做到了,但没有成功。 – 2012-01-23 16:29:41

+0

我也尝试从'@ Service'类调用该方法。它在启动时执行,但不执行插入。但是,从控制器调用该方法是可行的。 – 2012-01-23 16:32:04

+0

@miguel perher:我添加了一些更多细节 – Ralph 2012-01-23 16:51:00

相关问题