Я использую 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 или чем-то еще?
спасибо заранее