Улучшение байт-кода Hibernate: используйте ленивый прокси и байт-код одновременно - PullRequest
0 голосов
/ 09 апреля 2019

Я хочу, чтобы @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 с прокси-серверами и традиционной отложенной загрузкой?

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