2016-07-21 2 views
0

У меня есть 2 объекта. Entity nr.1 содержит несколько полей и некоторые коллекции, сопоставленные с одним из многих LAZY, а сущность nr.2 имеет отношение OneToOne к этому.Hibernate OneToOne для лица с OneToMany

Когда я хочу получить объект nr.2, все онтоманы в сущности nr. 1 также извлекаются, даже если они ЛАЗИ. Я не говорю о методе, просто получая один объект nr.2 и объект nr.1 без его коллекций.

Спасибо

примеры кода:

Это объект №. 2, который содержит отн OneToOne для объекта nr.2, который указан так:

@OneToOne 
@JoinColumn(name="id_employee") 
public Employee getEmployee() { 
    return employee; 
} 

public void setEmployee(Employee employee) { 
    this.employee = employee; 
} 

И это сущность nr.1, которая имеет много коллекций, как так:

@OneToMany(cascade = CascadeType.ALL, mappedBy="employee", orphanRemoval = true) 
@JsonManagedReference 
@XmlElement 
public Set<Phone> getPhone() { 
    return phone; 
} 

public void setPhone(Set<Phone> phone) { 
    this.phone = phone; 
} 

Ant Сотрудник имеет много коллекций , включая адрес и т. д., которые я не хочу показывать. Когда я возвращаю объект nr. 2, он показывает мне Employee со всеми его rels, и мне это не нужно. Это также дает мне знаменитый LazyInitexcepetion, хотя я не explicitily адрес запроса или телефон ...

+0

Вы можете поделиться своим кодом – Gokul

+0

Я поделился им, спасибо – ChrisTheDestroyer

+0

, когда вы сказали «return nr.2», вы имеете в виду, что вы не хотите, чтобы он отображался/представлялся как xml или json? (я предполагаю, что вы показываете его как конечную точку отдыха, так как у вас есть аннотации xml и json). если это так, то почему бы не добавить аннотации XmlTransient и JsonIgnore в ваш getEmployee? – geneqew

ответ

0
@OneToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="id_employee") 
public Employee getEmployee() { 
    return employee; 
} 

Из спецификации JPA 2.0, по умолчанию, как так:

OneToMany: LAZY 
ManyToOne: EAGER 
ManyToMany: LAZY 
OneToOne: EAGER 
+0

Нет, ленивое исключение инициализации – ChrisTheDestroyer

+0

И загрузка его явно дает мне ошибку сериализации. – ChrisTheDestroyer

+0

поделиться кодом, предоставляющим ленивое исключение инициализации. Если вы делаете что-то вроде object.employee(), getSomething() это вызовет ленивую инициализацию, потому что теперь она лениво загружается. – Gokul

0

Я решил это тем временем, используя пользовательские запросы. Поэтому я получаю только то, что мне нужно от OneToOne entitites, а затем я использую setter основного объекта для установки этих коллекций, не выбирая их. Значительное сокращение нет выбора и полосы пропускания.