创建休眠代理对象

杰普兹:
public class Account {
    private int pk;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "profileFK")
    private Profile profile;
}

public class Profile {
    private int pk;
    private String name;
}

我有一个帐户和一个profilePk,我希望能够设置关系而无需从数据库中获取配置文件,当我拥有PK时,有没有办法创建HibernateProxy?

我尝试仅使用PK创建一个新的Profile,将其保存到db时可以正常工作,但它也会将“空”对象放入休眠缓存中。

Profile dbProfile = new Profile();
dbProfile.setName("name");
profileDao.create(dbProfile);

Profile profile = new Profile();
profile.setPk(dbProfile.getPk());
account.setProfile(profile);
accountDao.save(account);

Account dbAccount = accountDao.get(account.getPk());
assertNull(dbAccount.getProfile().getName());
accountDao.refresh(dbAccount);
assertEquals("name", dbAccount.getProfile().getName());

但是我想做这样的事情

Profile dbProfile = new Profile();
dbProfile.setName("name");
profileDao.create(dbProfile);

account.setProfile(Hibernate.newProxy(Profile.class, dbProfile.getPk()));
accountDao.save(account);

Account dbAccount = accountDao.get(account.getPk());
assertEquals("name", dbAccount.getProfile().getName());

还是有其他选择,我不必在保存帐户之前从数据库获取配置文件?我们正在将数以百计的生成的带有mapstruct的旧对象迁移到jpa,这样可以简化通用解决方案。

船尾:

根据休眠文档,您应该执行以下操作:

Profile dbProfile = new Profile();
dbProfile.setName("name");
profileDao.create(dbProfile);

account.setProfile(entityManager.getReference(Profile.class, dbProfile.getPk()));
accountDao.save(account);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章