持久化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 楼答案
如果我理解正确,您希望搜索保存在create()中的对象。我认为该对象尚未持久化到数据库,您检索的是来自一级缓存的对象,http://www.tutorialspoint.com/hibernate/hibernate_caching.htm,因为您仍然在事务中。如果尝试按如下方式检索对象,并且方法saveUser()不在事务中,则将从数据库中获取用户对象(但从事务外部分离):