使用Spring Data和HIbernate JPA进行延迟加载

Jos*_*ova 2 java spring hibernate jpa spring-data-jpa

我正在使用SpringData和Hibernate执行一些测试,并在延迟加载和findBy ...方法上发现了一些有趣的行为.

我在子类上有以下方法.

列出findByArtistCredit(Long artistCreditId);

以及Recording和ArtistCredit之间的以下映射......

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="artist_credit" , referencedColumnName="artist_credit_id")
private ArtistCredit artistCreditReference; 
Run Code Online (Sandbox Code Playgroud)

在"一"方面......

@OneToMany(fetch=FetchType.LAZY,mappedBy="artistCreditReference")
private Set<Recording> recordings; 
Run Code Online (Sandbox Code Playgroud)

而且会发生的事情是,"多方面"的收集正在急切地被提取......

有谁知道"为什么会这样?"

任何答案都很好.

问候.

Adr*_*hum 5

通常情况下,不应该根据你所做的事情急切地抓住它.

recordings应该是一个延迟加载代理其装载在需要时才会触发.

然而,偶然触发延迟加载是一个常见的错误:

  1. 您可能在代码中意外访问了该字段,例如,在toString()/ hashCode()/中equals().
  2. 您正在通过调试器检查对象状态,调试器将轮流触发toString()或访问延迟加载字段.

我强烈建议您打开SQL加载并检查何时触发延迟加载.像JdbcDsLog这样的工具甚至只需打开Hibernate的SQL记录器就应该有所帮助