Hibernate причина суб выберите на ManyToone - PullRequest
0 голосов
/ 09 октября 2018

Я использую hibernate, и у меня есть эти сущности (я не могу опубликовать реальную сущность по причинам конфиденциальности):

EntityOne
   pay_code
   number
   pay_code_number  => primary key


EntityTwo
   pay_code  => primary key
   number    => primary key
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumns({
        @JoinColumn(name="pay_code", referencedColumnName="pay_code", insertable=false, updatable=false),
        @JoinColumn(name="number", referencedColumnName="number", insertable=false, updatable=false)})
   EntityOne entityOne;


EntityThree
   id
   pay_code_number => primary key
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="pay_code_number", insertable=false, updatable=false)
   EntityOne entityOne;

И когда я делаю выбор из EntityThree и присоединяюсь, извлекаю et.entityOne fethработает, и выбор больше не выполняется.

Но когда я делаю выбор из EntityTwo и выборки соединения et.entityOne выборка, кажется, не сделана, и это вызывает суб-выбор, и у меня есть два варианта выбора, которые занимают много времени ..Если я смотрю сгенерированный sql, я вижу все поля из entityOne и entityTwo в предложении select, поэтому для меня hibernate может загрузить сущность без отправки другого выбора в базу данных.но я не знаю, почему он этого не делает.

Разница заключается в столбце соединения, потому что EntityThree выполняет соединение на primaryKey, а entityTwo выполняет соединение на столбце, который не является primarykey для EntityOne.И я думаю, это потому, что hibernate пытается найти сущность по primarykey и не находит ее из-за описанного ранее столбца соединения.

Первое решение состоит в том, чтобы переделать соединение, чтобы pay_code_number в entityTwo и выполнить соединение нав этой колонке, но перед этим решением и изменением слишком многих вещей, я спрашиваю здесь, может ли кто-нибудь помочь мне избежать этой переделки.Возможно, с формулойJoinColumn или чем-то еще?

спасибо заранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...