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:我已经添加了一些详细信息