У меня есть 2 сущности: пользователя и Userprofile, которые имеют двунаправленную @OneToOne отношения между ними.
Из-за какой-то старой конструкции БД UserProfile является владельцем (у меня есть столбец user_id в таблице users_profiles)
Связь Lazy, поскольку у меня есть fetchType Lazy и optional = false.
Все работает так, как ожидалось, я имею в виду, когда загружаю UserProfile, он автоматически не загружает пользователя. Я думаю, это совершенно нормально, поскольку я загружаю со стороны владельца.
Моя проблема заключается в том, что если я загружаю пользователя (принадлежащую ему сторону), он автоматически загружает UserProfile, хотя отношения ленивы.JPA OneToOne Ленивый отношение
Я имею в виду: Является ли это нормальным, когда я загружаю объект из собственной стороны, чтобы загрузить объект владельца?
@Entity
@Table(name = "users")
public class User extends BaseEntity implements Serializable {
@OneToOne(mappedBy = "user", optional=false, fetch = FetchType.LAZY)
private UserProfile profile;
// .................rest of entity
}
@Entity
@Table(name="users_profiles")
public class UserProfile extends BaseEntity implements Serializable {
@OneToOne(optional=false, fetch = FetchType.LAZY)
@JoinColumn(name="user_id")
private User user;
// ... rest of entity here
}
Способ, которым я проверяю это, путем загрузки объекта User с помощью метода EntityManager find (id).
Я заметил, что когда отношение не ленится, у меня есть только один запрос с объединением внутри. Если я поставлю текущую настройку, у меня есть два отдельных запроса: 1 для пользователя, а другой для профиля.
Вы можете указать тип fetch для каждой стороны отношения. Похоже, вы указали только одно направление, другое направление - поведение по умолчанию. Кроме того, вы можете вставить фрагмент кода JPA, а не объяснять его. –
указано, и он ленив в обоих направлениях. –
http://stackoverflow.com/questions/17987638/hibernate-one-to-one-lazy-loading-optional-false –