2015-07-09 6 views
0

У меня есть объект A, связанный с объектом B с аннотацией @ManyToMany. Объект B имеет идентификатор и имя. Я бы получил только эти два свойства, не извлекая весь объект, я буду извлекать его позже, если мне это понадобится, чтобы не напрягать память.Hibernate - получить свойство объекта без получения всего объекта

Я пытался использовать @AccessType («свойство»), но он не работает (или, может быть, я использую его в неправильном направлении :))

Я не хочу использовать жадный fetchType.

Это @ManyToMany ассоциации:

@ManyToMany(fetch = FetchType.LAZY) 
    @AccessType("property") 
    @JoinTable(name = "C_CONTACT_USER_MANAGES_CONTACTS", catalog = "dbo", joinColumns = { 
     @JoinColumn(name = "CONTACT_USER_ID_FK", nullable = false, updatable = true) }, inverseJoinColumns = { 
     @JoinColumn(name = "CONTACT_ID_FK", nullable = false, updatable = true) }) 
    public Set<ContactTO> getManagedContacts() { 
     return managedContacts; 
    } 

    public void setManagedContacts(Set<ContactTO> managedContacts) { 
     this.managedContacts = managedContacts; 
    } 

где пользователь контакт управлять несколькими контактами.

И это ошибка я получаю (список управляемых контактов должны быть загружены, в самом начале, так что не любой сеанс открыт еще)

failed to lazily initialize a collection of role: org.un.cdb.to.ContactUserTO.managedContacts, could not initialize proxy - no Session 

Любая идея?

Благодаря

+0

что-то не только с помощью запроса? 'SELECT user.managedContacts.id, user.managedContacts.name FROM ContactUserTO user' – beerbajay

+0

без какого-либо соединения? – SG87

+0

Вы можете перемещать вложенные объекты с помощью JPQL. Однако я не тестировал именно этот синтаксис. – beerbajay

ответ

0

Следуя совету @ beerbajay, я нашел решение:

select contacts.contactId, contacts.lastName, contacts.firstName 
from ContactUserTO contactUser join contactUser.managedContacts contacts 
where contactUserId := contactUserId 

Спасибо за помощь;)

Смежные вопросы