0

我正在做一个个人项目,我有一个奇怪的问题,即使经过数小时的研究和调试,我似乎也无法解决,所以很明显它一定很简单,我忽略了......无论如何,上下文是:JPA + PostgresSQL + Glassfish。我有一个实体(由 netbeans 生成),MvUser,具有:

@Id
@Basic(optional = false)
@NotNull
@Column(name = "id")
@SequenceGenerator(name="mv_user_autoincrement_gen",sequenceName     ="mv_user_autoincrement",allocationSize=1)  
@GeneratedValue(strategy=GenerationType.IDENTITY, generator="mv_user_autoincrement_gen") 
private Long id;

然后,我有一个 AbstractFacade,其中包含所有样板持久性代码的泛型。
在这里,我有一个没有太大作用的方法,只是:

@Override
public void create(T entity) {
    getEntityManager().persist(entity);
}

现在,假设我在我的服务类中调用它:首先我注入我的外观:

@EJB
IMvUserFacade userFacade;

然后我会用它:

@Override
public void saveUser(MvUser user)
{
    userFacade.create(user);
    // more business specific code follows
}  

我这样打电话给服务

MvUser = new MvUser();
... setters etc
mvUserService.saveUser(user);

现在,发生的事情是在创建方法中对象被持久化,我拥有生成的 id 和所有内容。因为在整个链上我有对象参数,我假设在 saveUser 级别会找到相同的对象,但不,我留下了一个分离的实体。我做错了什么?谢谢。

4

1 回答 1

0

如果我理解正确,您想搜索您在 create() 中保存的对象。我认为该对象尚未持久化到数据库中,您检索的是来自一级缓存http://www.tutorialspoint.com/hibernate/hibernate_caching.htm的对象,因为您仍在事务中。如果您尝试按以下方式检索对象并且方法 saveUser() 不在事务中,您将从数据库中获取用户对象(但由于外部事务而分离):

public void saveUser(MvUser user)
{
userFacade.create(user);
userFacade.get(userId);
// more business specific code follows
} 
于 2013-02-10T10:22:37.370 回答