Я работаю с Hibernate и попытаться оптимизировать загрузку зарубежных объекты аннотированных сКак переопределить загрузку LAZY после закрытия сессии?
@ManyToOne(fetch = FetchType.LAZY)
Я не хочу, чтобы получить иностранное юридическое лицо во время спящего режима запроса и использовать Lazy типа выборки. Позже (после того, как сессия уже закрыта), я хочу получить эту внешнюю сущность, но использовать инструмент, отличный от спящего режима (другой кэшированный DAO (GuavaCache), который уже хранит иностранный объект).
Из козы, сразу у меня возникло исключение LazyInitializationException.
Я не могу заменить аннотацию @ManyToOne @Transient из-за toooooo много устаревшего кода HQL, который не работает после удаления @MabyToOne.
Somewere кто-то посоветовал сделать геттер окончательный и не имеют доступа к сущности поля прямолинейно, а просто использовать поглотитель. Вот пример:
private int foreignId;
@Basic
@Column(name = "foregn_id")
public int getForeignId() { return foreignId;}
public void setForeignId(int id) { this.foreignId = id; }
// private DBForeignEntity foreignEntity; no more sense to have this field
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "foregn_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
public final DBForeignEntity getForeign() {
// return foreignEntity; deprecated usage! Hibernate will create proxy object and throw LazyInitException after session was closed
return getFromCache(getForeignId());
}
public void setForeign(DBForeignEntity foreignEntity) {
// this.foreignEntity = foreignEntity; no more sence for having setter at all
}
это некрасиво решение exludes любые способности сохраняются вложенные объекты, из-за отсутствия сеттера для иностранного лица больше!
Есть ли еще одно решение для отказа от Hibernate для создания прокси-объекта для моего объекта? Как избежать LazyInitializationException, если сеанс закрыт? Есть ли какие-либо плохие последствия не-прокси в этом случае?
какие-либо предложения? – user2602807
Таким образом, в основном, когда вы выбираете связанный объект, вы не хотите использовать тот же сеанс-фабрику, вы имеете в виду другое хранилище данных (возможно, такое же, но с помощью другого механизма-guava). Если это так, то я думаю, вам нужно будет сделать связь между основным и связанным сущностью вручную. Не совсем уверен в проблеме, поэтому записывайте ее как комментарий вместо ответа. – Atul
Что это значит? «... установить связь между первичным и связанным сущностью вручную» Как это должно выглядеть? – user2602807