【发布时间】:2015-03-14 02:52:30
【问题描述】:
我对 @Transactional 注释有奇怪的行为。该代码与 caller 上的 @Transactional 配合良好:
import org.springframework.transaction.annotation.Transactional;
private javax.persistence.EntityManager em;
@Transactional
public void caller(String login) {
callee(login);
}
public void callee(String login) {
user = new User(login);
em.persist(user);
userInfo = new UserInfo();
userInfo.setUser(user);
em.persist(userInfo);
}
但以下实现在第二个 em.persist 上返回 错误,被调用者上带有 @Transactional:
import org.springframework.transaction.annotation.Transactional;
private javax.persistence.EntityManager em;
public void caller(String login) {
callee(login);
}
@Transactional
public void callee(String login) {
user = new User(login);
em.persist(user);
userInfo = new UserInfo();
userInfo.setUser(user);
em.persist(userInfo); // ERROR: org.hibernate.action.internal.UnresolvedEntityInsertActions : HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
}
返回错误:
org.hibernate.action.internal.UnresolvedEntityInsertActions : HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
Unsaved transient entity: ([package.entities.User#<null>])
Dependent entities: ([[package.entities.UserInfo#<null>]])
Non-nullable association(s): ([package.entities.UserInfo.user])
有人有想法吗?
谢谢!
【问题讨论】:
-
Spring使用代理来应用AOP,这基本上意味着只有方法调用INTO(外部)对象检索AOP,内部方法调用通过代理。
标签: spring jpa transactional