Hibernate - принудительное внутреннее соединение между родителем и подклассом - PullRequest
2 голосов
/ 12 ноября 2010

У меня есть родительский класс Party и подкласс LiveParty вместе с другими (см. Ниже), и это всегда отношение один к одному в базе данных. Всякий раз, когда я использую Criteria API, он выполняет левое внешнее соединение между ними. Я хочу принудительно установить внутреннее соединение между родителем и потомком, поскольку это влияет на производительность для некоторых запросов, но я не могу найти способ сделать это в документации, кто-нибудь может предложить способ?

@Entity
@Table(name = "Party", schema = "dbo")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Party{
...
}

@Entity
@Table(name = "LiveParty", schema = "dbo")
@PrimaryKeyJoinColumn(name = "partyId")
public class LiveParty extends Party {
...
}

1 Ответ

0 голосов
/ 14 ноября 2010

Каждый раз, когда я использую Criteria API, он выполняет левое внешнее соединение между ними.

Это действительно то, что вы получите при использовании стратегии JOINED, Hibernate выполнит внешнее объединение всех таблиц, соответствующих потомкам данного узла наследования.дерево для того, чтобы вывести и вернуть фактический тип для данной строки (см. этот отличный предыдущий ответ от ChssPly76 для деталей).

Другими словами, я не думаю , что вы можете заставить Hibernate использовать внутреннее соединение, по крайней мере, без изменения отображения (используя вторичную таблицу или отношение OneToOne,Я не уверен, какие именно у вас ограничения).

Схожие вопросы

...