Ленивая выборка не работает для отношения OneToOne в EclipseLink - PullRequest
0 голосов
/ 12 декабря 2018

В моем проекте я использовал EclipseLink в качестве реализации JPA.И у меня есть две сущности, Product и ProductDetail:

  • Они имеют отношение один к одному.Один продукт должен иметь только один ProductDetail.
  • ProductDetail не может быть нулевым.Один продукт всегда должен иметь ProductDetail.
  • Отношение является однонаправленным.Я получу доступ к ProductDetail только из Product.
  • У двух объектов должен быть общий первичный ключ, идентификатор продукта должен быть равен prodId ProductDetail.

Поэтому я спроектировал модели сущностей следующим образом:

@Table(name="product")
public class Product{
    @Id
    @GeneratedValue(generator = "PRODUCT_ID")
    @UuidGenerator(name = "PRODUCT_ID")
    @Column(name = "id", unique=true, nullable=false, length=200)
    private String id;

    // Some other properties....

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    @PrimaryKeyJoinColumn
    private ProductDetail productDetail;
}

@Table(name="product_detail")
public class ProductDetail{
    @Id
    @Column(name = "prod_id", unique=true, nullable=false, length=200)
    private String prodId;

    // Some other properties....
}

Но ленивая загрузка никогда не работала.ProductDetail всегда выбирается вместе с Product.Я проверил много документов, но все еще не могу понять это.У кого-нибудь есть опыт по этому поводу?Большое спасибо!

УВЕДОМЛЕНИЕ : я использую EclipseLink, но не Hibernate.

1 Ответ

0 голосов
/ 12 декабря 2018

Чтобы ленивая загрузка работала над отношениями toOne, EclipseLink должен внедрить прокси в ссылку.Этот процесс называется «ткачество».

По умолчанию этот параметр не включен, поэтому необходимо ознакомиться с документацией о том, как включить ткачество для среды выполнения:

https://www.eclipse.org/eclipselink/documentation/2.7/solutions/testingjpa004.htm#CHDEECDB

...