我對春節@Transactional
註解和堅持的誤解。我正在使用Spring 3.1,使用JPA和Hibernate。我認爲persist意味着,將實體添加到持久性上下文中(但不要執行任何查詢,直到提交或刷新),並且註釋的含義是用事務包裝該方法。春季交易註釋,休眠和堅持
但是,在這個簡短的例子中,當執行指針到達時,由於名稱不能爲空(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()
,一切正常。然而,我不明白爲什麼其他解決方法不會這樣,因爲我認爲任何查詢都會在方法結束時生成並執行。
有人能解釋一下嗎?
有趣,有道理,現在我明白了,實際上我有GenerationType.IDENTITY。謝謝 – stivlo