У меня есть две сущности:JPA рассчитывать связанные объекты без присоединения к ним
@Entity
class X {
@Id
int id;
}
@Entity
class Y {
@Id
int id;
@ManyToOne
@JoinColumn(name = "x_id")
X x;
}
Я хотел бы рассчитывать различные значения x_id в у стола. Я пробовал:
select count(distinct Y.x) from Y;
Это работает, но в SQL я получаю присоединиться к й таблице, которая uneccesery:
select count(distinct x.id) from y, x where y.x_id = x.id;
Это соединение является ненужным и довольно дорого для меня. Есть ли способ избежать этого без собственного запроса?
Обратите внимание, что ответ здесь может быть реализации- зависимый. Например, Hibernate может генерировать более эффективный запрос. – chrylis
Я боялся этого. Я использую eclipselink – Matzz
Решение JPA заключается в том, что если вы не хотите присоединиться к таблице X, не сопоставляйте его как отношения. Вы отобразите внешний ключ «x_id» как базовый для использования в запросах без объединения. EclipseLink также имеет ключи запроса, которые могут быть созданы для использования поля в запросах в качестве базового сопоставления, чтобы вы могли точно контролировать, что вы хотите, ты хочешь это. Что касается этого запроса, какую версию вы используете? – Chris