持久化java实体引用问题

时间:2013-02-10 10:07:43

标签: java reference persistence

我正在从事一个个人项目,我有一个奇怪的问题,即使经过数小时的研究和调试,我似乎无法解决这个问题,所以很明显它一定很简单,我忽略了...... 。 无论如何,上下文是: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);

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

1 个答案:

答案 0 :(得分: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
}