Spring@Transactional
アノテーションと永続化について誤解しています。JPAとHibernateでSpring 3.1を使用しています。永続化とはエンティティを永続化コンテキストに追加することを意味し(ただし、コミットまたはフラッシュするまでクエリを実行しないでください)、@Transactional
アノテーションはメソッドをトランザクションでラップすることを意味すると思いました。
ただし、この短い例では、実行ポインターが永続に達すると、name を null にすることはできない (db 制約) ため、例外で失敗します。
import javax.persistence.EntityManager;
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void test() {
Brand brand = new Brand();
entityManager.persist(brand);
brand.setName("test");
}
と を交換するsetName()
とpersist()
、すべてが機能します。ただし、メソッドの最後にクエリが作成されて実行されると思っていたので、なぜ逆にそうでないのかわかりません。
誰か説明してくれませんか?