LINUX.ORG.RU

Hibernate one to many eager

 ,


0

1

Знакомлюсь с hibernate и возникла проблема:

Есть пользователь (user, он же client) и у него может быть много счетов (account).

SELECT * FROM bank_account WHERE client_id = 100000; Данный запрос возвращает 3 аккаунта.

Делаю отображение

для пользователя .....

    @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user")
    private Set<Account> accounts = new HashSet<>();
.... для аккаунта .....
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "client_id")
    private User user;
....

Дальше беру пользователя User user = userService.getUserById(100000);

Но хэш сет accounts пуст. EAGER использую, т.к. при работе с пользователем всё равно всегда нужны аккаунты.

Причем другие связи к этому пользователю (один к одному и много ко многим, lazy и eager) нормально загружают данные сразу.

Пробывал через ленивую загрузку, но возникает Exception: unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception

и больше никакой информации. Но это скорей всего потому что сессия закрыта.

Использую spring 4.1.4 и hibernate 4.3.7

Если нужна какая-то дополнительная информация, скажите, скину. Помогите пожалуйста. Уже два часа не могу решить проблему.


Посмотрел какой запрос делается hibernate

Hibernate: 
    select
        user0_.id as id1_2_0_,
        user0_.address as address2_2_0_,
        user0_.citizenship as citizenship3_2_0_,
        user0_.date_of_birth as date_of_birth4_2_0_,
        user0_.email as email5_2_0_,
        user0_.fname as fname6_2_0_,
        user0_.lname as lname7_2_0_,
        user0_.password as password8_2_0_,
        user0_.patronymic as patronymic9_2_0_,
        user0_.phone as phone10_2_0_,
        user0_.tin as tin11_2_0_,
        accounts1_.client_id as client_id5_2_1_,
        accounts1_.id as id1_0_1_,
        accounts1_.id as id1_0_2_,
        accounts1_.balance as balance2_0_2_,
        accounts1_.bank_identifier as bank_identifier3_0_2_,
        accounts1_.currency as currency4_0_2_,
        accounts1_.client_id as client_id5_0_2_,
        userroles2_.user_id as user_id1_2_3_,
        userrole3_.id as role_id2_4_3_,
        userrole3_.id as id1_1_4_,
        userrole3_.name as name2_1_4_ 
    from
        bank_user user0_ 
    left outer join
        bank_account accounts1_ 
            on user0_.id=accounts1_.client_id 
    left outer join
        user_role userroles2_ 
            on user0_.id=userroles2_.user_id 
    left outer join
        bank_role userrole3_ 
            on userroles2_.role_id=userrole3_.id 
    where
        user0_.id=?
Hibernate: 
    select
        passport0_.id as id1_3_0_,
        passport0_.date_of_issue as date_of_issue2_3_0_,
        passport0_.issued_by as issued_by3_3_0_,
        passport0_.num as num4_3_0_,
        passport0_.series as series5_3_0_ 
    from
        passport passport0_ 
    where
        passport0_.id=?

left outer join bank_account т.е. присоединение то делает, данные почему-то не видит или не находит получается!?

mrXorg
() автор топика
Ответ на: комментарий от mrXorg
2015-05-10 19:33:02 TRACE BasicBinder:81 - binding parameter [1] as [BIGINT] - [100000]
2015-05-10 19:33:02 TRACE BasicExtractor:68 - extracted value ([id1_0_2_] : [BIGINT]) - [null]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([id1_1_4_] : [BIGINT]) - [1]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([address2_2_0_] : [VARCHAR]) - [Moscow]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([citizenship3_2_0_] : [VARCHAR]) - [rus]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([date_of_birth4_2_0_] : [DATE]) - [1990-01-11]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([email5_2_0_] : [VARCHAR]) - [xxx@mail.ru]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([fname6_2_0_] : [VARCHAR]) - [Иван]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([lname7_2_0_] : [VARCHAR]) - [Иванов]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([password8_2_0_] : [VARCHAR]) - [a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([patronymic9_2_0_] : [VARCHAR]) - [Иванович]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([phone10_2_0_] : [VARCHAR]) - [89269262626]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([tin11_2_0_] : [BIGINT]) - [123456789126]
2015-05-10 19:33:02 TRACE EnumType:454 - Returning [ROLE_CLIENT] as column [name2_1_4_]
2015-05-10 19:33:02 TRACE BasicExtractor:68 - extracted value ([client_id5_2_1_] : [BIGINT]) - [null]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([user_id1_2_3_] : [BIGINT]) - [100000]
2015-05-10 19:33:02 TRACE BasicExtractor:78 - extracted value ([role_id2_4_3_] : [BIGINT]) - [1]

По аккаунтам ничего нету(((

mrXorg
() автор топика
Ответ на: комментарий от mrXorg

Решил проблему - выложи решение, возможно поможет кому.

roy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.