Hibernate - 为啥延迟加载 String 属性? [复制]

Posted

技术标签:

【中文标题】Hibernate - 为啥延迟加载 String 属性? [复制]【英文标题】:Hibernate - why is a String property lazily loaded? [duplicate]Hibernate - 为什么延迟加载 String 属性? [复制] 【发布时间】:2021-02-21 14:08:45 【问题描述】:

我有一个简单的实体Configuration,它有一个 ID 和一个字符串属性。

@Data
@AllArgsConstructor
@NoArgsConstructor
@Wither
@Entity
@Table(name = "CONFIGURATION")
public class Configuration 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Long id;

    @Column(name = "CONFIG_OBJECT")
    private String configItem1;

我有简单的 JPA 存储库

public interface ConfigurationRepository extends JpaRepository<Configuration, Long> 


在 Cucumber 测试中,我尝试访问该字段

final Configuration configuration = configurationRepository.getOne(1L);//id 1 exists
configuration.getConfigItem1(); //the exception is thrown here

但是我遇到了这个异常 could not initialize proxy [com.mk.myapp.model.Configuration#1] - no Session

我假设属性configItem1 正在被延迟加载,但为什么呢?当我在关系中有一些实体时,我会预料到这一点,但是为什么要延迟加载 String 属性?

【问题讨论】:

【参考方案1】:

您用于检索配置实体getOne(1) 的方法始终返回具有未初始化字段的代理。 afaik 仅填充了 id 字段。

尝试您的存储库的findbyId 方法来获取您的配置,您会发现您的字符串字段已填充。

这个问题之前也已经回答过,例如When use getOne and findOne methods Spring Data JPA 所以我认为这可以作为副本关闭。

【讨论】:

以上是关于Hibernate - 为啥延迟加载 String 属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate延迟加载

hibernate 延迟加载

hibernate延迟加载

Hibernate延迟加载机制

JavaWeb系列——Hibernate——延迟加载(转)

hibernate 延迟加载