我对 Spring@Transactional
注释有误解并坚持下去。我正在使用带有 JPA 和 Hibernate 的 Spring 3.1。我认为持久化意味着将实体添加到持久化上下文中(但在提交或刷新之前不要执行任何查询),并且@Transactional
注释意味着用事务包装方法。
但是,在这个简短的示例中,当执行指针到达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()
and persist()
,一切正常。但是,我不明白为什么反过来不行,因为我认为任何查询都会在方法结束时构建和执行。
有人可以解释一下吗?