Jpa с 2 многие к одному отношению - PullRequest
0 голосов
/ 14 января 2020

В приложении весенней загрузки с hibernate jpa у меня есть 3 таблицы:

@Entity
public class Event {

    @Id
    private Long eventId;

    @ManyToOne
    private Account account;
    ...
}

@Entity
public class Account{

    @Id
    private Long accountId;

    @ManyToOne
    private Party party;

    @OneToMany(mappedBy = "account")
    private List<Event> events;
    ...
}

@Entity
public class Party{
    @Id
    private Long partyId;

    @OneToMany(mappedBy = "party")
    private List<Account>accounts;
    ...
}

У меня есть accountId, из которого я хотел бы получить все события, связанные с партией учетной записи. , Можно ли сделать это одним запросом?

На самом деле я сделал

select ce from Event ce where ce.account in 
 ( select ba from Account ba join ba.party p where p.partyId in 
    ( select  py from Party py join py.accounts bao where bao.accountId=:accountId) ) 

любой улучшенный запрос?

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Вам необходимо добавить @JoinColumn(name={{joinKeyName}}) к вашим @ManyToOne аннотациям.

Пример:

    @ManyToOne
    @JoinColumn(name="accountId")
    private Account account;

Тогда ваш HQL-запрос будет выглядеть следующим образом:

select ce from Event ce 
   join fetch ce.account ba 
   join fetch ba.Party py 
   where ba.accountId=:accountId
0 голосов
/ 14 января 2020

Попробуйте sql, если возникнут проблемы, сообщите мне

  select * from Event as e 
inner join Account as acc on e.account_accountId = acc.accountId 
inner join Party as p on acc.party_partyId =p.partyId
where acc.accountId=:accountId;
...