Можно ли будет просто открыть внешний ключ вместо всего объекта в интерфейсе @ManyToOne - PullRequest
1 голос
/ 18 ноября 2010
@Entity public class Organization {}

@Entity public class User {
    @ManyToOne
    Organization org;
}

@ManyToOne interface в приведенном выше коде моделируется как "Organization org", хотя в базе данных хранится только идентификатор организации. Разве я не могу просто смоделировать это как Integer orgId, чтобы избежать постоянных загрузок всего объекта Organization.

Иногда, когда мы массово импортируем пользователей для разных организаций, больше времени тратится на загрузку организаций, а не на само постоянство пользователей. Хотелось бы узнать, как другие справляются с этой проблемой.

1 Ответ

2 голосов
/ 19 ноября 2010

Вы должны использовать @ManyToOne(fetch=FetchType.LAZY) для отложенной загрузки Hibernate (FetchType.LAZY), чтобы не был загружен весь объект Organization. Если вы обращаетесь только к user.org.id, hibernate будет знать, что не нужно объединять всю таблицу, просто чтобы найти идентификатор_организации.

См. http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc-fetching

И да, вы можете просто отобразить Integer orgId, если это действительно единственное поле, которое вы будете использовать в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...