Я хочу, чтобы @OneToOne
поля сущности были ленивыми (за счет улучшения байтового кода), а @OneToMany
- ленивыми по доверенности.
@Entity
@Table(name = "CLIENTS")
class Client {
@Id
@Column(name = "CLIENT_KEY")
@GeneratedValue(generator = "triggerAssigned")
private Long key;
@JoinColumn(name = "CLIENT_TYPE_KEY", referencedColumnName = "TYPE_KEY", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private ClientType clientType;
@Fetch(value = FetchMode.JOIN)
@OneToOne(mappedBy = "client")
@LazyToOne(value = LazyToOneOption.NO_PROXY)
private ClientAddress clientAddress;
}
@BatchSize(size = 100)
@Entity
@Table(name = "CLIENT_ADDRESS")
class ClientAddress {
@Id
Long key;
@MapsId
Client client;
}
@Entity
@Table(name = "CLIENT_TYPE")
@BatchSize(size = 100)
class ClientType {
@Id
@GeneratedValue(generator = "triggerAssigned")
@Column(name = "TYPE_KEY")
private Long key;
}
Когда я запрашиваю информацию о клиенте, я ожидаю, что ClientType будет прокси-сервером и будет получаться лениво.Но в спящем режиме выберите Client + ClientType строка за строкой (n + 1 проблема).Кажется, игнорируются обе аннотации BatchSize.Я попытался поместить @LazyToOne
аннотацию в поле clientType, но это еще хуже: CLIENT_TYPE_KEY
столбец запрашивается лениво, а затем ClientType запрашивается n раз.
Знаете ли вы, работает ли байт-код hibernate с прокси-серверами и традиционной отложенной загрузкой?