У меня есть постоянный класс, который содержит отношения ManyToOne с моей пользовательской таблицей для целей аудита. На самом деле, все мои классы имеют эти поля, даже класс User.Hibernate ManyToOne/N + 1 Issue
public class MyClass implements Serializable {
@Fetch(value=FetchMode.SELECT)
@ManyToOne(optional=false, fetch=FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "CREATE_USER_ID")
public User getCreatedBy() {
return createdBy;
}
@Fetch(value=FetchMode.SELECT)
@ManyToOne(optional=false)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name="USER_ID")
public User getLastUpdatedBy() {
return lastUpdatedBy;
}
}
Просто сделать это еще лучше, некоторые каштановый сделаны поля аудита в большинстве таблиц полукокса (8), но поле в T_USER VARCHAR2, (8), а это означает, что внешний ключ не может создаваться на них.
Anyhoo, запрос для MyClass будет запускать запросы для заполнения полей аудита, которые затем, в свою очередь, вызывают запрос для заполнения поля аудита пользователя.
Мне редко нужны поля аудита, поэтому я хочу сделать их ленивыми. К сожалению, я думаю, что у меня много работы против меня, не в последнюю очередь из-за плохо разработанной схемы.
Может ли кто-нибудь помочь мне здесь?
Джейсон
Пробовал это без везения. Я делал предположение, что нехватка внешних ключей ушибала мою способность ленить загружать отношения ManyToOne. – Jason
Хорошо, я обновил свой ответ с другим предложением. –
Я принял ваш ответ. По дальнейшим исследованиям, похоже, что NotFound выполняет дополнительный запрос. Я хотел бы иметь лучшее из обоих миров, где ManyToOne может быть нулевым, но NotFound не будет запускать дополнительный запрос. – Jason