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] 删除。
我来说两句