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, и я хочу иметь возможность установить отношение, не получая профиль из базы данных, есть ли способ создать HibernateProxy, когда у меня есть PK для него?
Я попытался просто создать новый профиль, включив в него только PK, который работает при сохранении в 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, и что-то вроде этого значительно упростит общее решение c.