有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

持久化java实体引用问题

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

  1. # 1 楼答案

    如果我理解正确,您希望搜索保存在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
    }