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 を追加する


追加した:

2 番目に確認する必要があるのは、@Transactional(readonly=false)注釈が考慮されていることです。Spring Proxy AOP (AspectJ ではない) を使用する場合、これは、アノテーションが付けられたメソッド@Transactional(readonly=false)は、他の Bean から (直接) 呼び出された Bean でなければならないことを意味します。

于 2012-01-18T07:54:41.077 に答える