Hibernate 弹簧&x2B;JPA&x2B;休眠:启动时没有插入

Hibernate 弹簧&x2B;JPA&x2B;休眠:启动时没有插入,hibernate,spring,jpa,persist,postconstruct,Hibernate,Spring,Jpa,Persist,Postconstruct,我在启动时使用@PostConstruct注释执行一个方法。此方法必须检查存储在DB表中的值。如果它不存在,那么它必须插入它。DB中的值的检查是正确的,但是如果我必须保持它,它就不会将它写入DB。它不会引发任何异常,并且执行persist()时(显然)没有出现问题,只是没有将值插入到数据库中 此外,一旦一切就绪,如果我手动调用该方法(例如从控制器),它将正确插入值 @PostConstruct public void insertIfNecessary() { Request r = Re

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

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

@PostConstruct
public void insertIfNecessary()
{
   Request r = Request.findRequestForUser(this.me);
   if ( r == null )
   {
      r = new Request();
      r.setOwner(this.me);
      r.persist();
   }
}
你知道可能出了什么问题吗

致以最良好的祝愿,
Miguel

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

将@Transactional添加到方法中


添加:


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

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

将@Transactional添加到方法中


添加:


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

我还尝试从
@Service
类调用该方法。它在启动时执行,但不执行插入。但是,从控制器调用该方法是可行的。@miguel perher:我添加了一些详细信息。我还尝试从
@Service
类调用该方法。它在启动时执行,但不执行插入。但是,从控制器调用该方法是可行的。@miguel perher:我已经添加了一些详细信息