Я сопоставляю отношения, в которых не используется первичный ключ сущности.Использование «referencedColumnName» со столбцом, отличным от первичного ключа, заставляет hibernate охотно извлекать ассоциацию, выдавая дополнительный выбор, даже если он помечен как FetchType.LAZY.
Моя цель - заставить его вести себя какрегулярное сопоставление, означающее, что он не будет выдавать дополнительный запрос каждый раз, когда мне нужно запросить основную сущность.
Я уже пытался использовать @LazyToOne (LazyToOneOption.NO_PROXY), что решает проблему, но этоне работает с модулем Джексона (библиотека синтаксического анализа JSON) "jackson-datatype-hibernate5", который пропускает ленивые прокси гибернации при сериализации результатов.
Вот сценарий, почти такой же, как у меня, который вызывает проблему:Entities:
@Entity(name = "Book")
@Table(name = "book")
public class Book
implements Serializable {
@Id
@GeneratedValue
private Long id;
private String title;
private String author;
@NaturalId
private String isbn;
//Getters and setters omitted for brevity
}
@Entity(name = "Publication")
@Table(name = "publication")
public class Publication {
@Id
@GeneratedValue
private Long id;
private String publisher;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "isbn",
referencedColumnName = "isbn"
)
private Book book;
@Column(
name = "price_in_cents",
nullable = false
)
private Integer priceCents;
private String currency;
//Getters and setters omitted for brevity
}
Репозиторий (Spring-Data, но вы можете попробовать напрямую с EntityManager):
@Repository
public interface PublicationRepository extends JpaReadRepository <Publication, Long>
{
@Query ("SELECT d FROM Publication d WHERE d.publisher = ?1 ")
Optional <Publication> findByPublisher (String isbn);
}
Спасибо