Hibernate 5.2.9:@Basic(fetch = FetchType.LAZY) 不工作

Posted

技术标签:

【中文标题】Hibernate 5.2.9:@Basic(fetch = FetchType.LAZY) 不工作【英文标题】:Hibernate 5.2.9:@Basic(fetch = FetchType.LAZY) is not working 【发布时间】:2017-04-06 17:02:29 【问题描述】:

我看到之前有很多关于堆栈溢出的同一件事以不同方式提出的问题。我在 Hibernate 论坛上查看了这个问题之一,他们提到它会起作用。我们可以参考这个link

基于此链接,延迟加载应该适用于基本属性类型,如 byte[]

我使用的是休眠版本 5.2.9 + postgresql DB

我的实体模型是这样的

@Entity
@Table
public class ResourceFileEntity 
@Id
@GeneratedValue
long id;

@Column
private String storageType;

@Column
private String path;

@Lob
@Basic(fetch = FetchType.LAZY)
@Column
byte[] fileContent;
// removed getters/setter for readibility

获取实体的代码是

public ResourceFileEntity fetchEntity(long jId) throws IOException 
Session session = factory.openSession();
ResourceFileEntity entity = null;
Transaction tx = null;
    try 
        tx = session.beginTransaction();
        entity = session.find(ResourceFileEntity.class, jId);
        System.out.println(Hibernate.isPropertyInitialized(entity,      "fileContent" ));
        tx.commit();
     catch (HibernateException e) 
        if (tx != null)
            tx.rollback();
        e.printStackTrace();
     finally 
        session.close();
    
    return entity;

很多人都提到了字节码增强,我确实尝试在我的项目 build.gradle 中放置所有必需的细节并使用@LazyGroup,但仍然没有运气。

对此的任何意见都会有很大帮助!

【问题讨论】:

【参考方案1】:

您可能会遇到HHH-10929。尽管这还没有通过使用 Hibernate template 的独立测试用例来证明。如果您认为有问题,可能值得创建一个?

【讨论】:

+1。这可能是一个错误。如果您更喜欢 JPA API,那么您也可以使用JPA test case template。 当然。将添加测试用例。感谢 Vlad 和 Alex 的回复 我已经在HHH-10929中添加了测试用例 对 Jira 的响应表明您的配置存在问题。建议的更改是否解决了您的问题? 是的...我的实体在 src/test/java 中。它应该在 src/main/java 和 IDE 中,不知何故字节码增强不起作用。我通过命令行运行它并运行它。我也可以延迟加载 OneToOne 和 ManyToOne 关联。感谢您的帮助!

以上是关于Hibernate 5.2.9:@Basic(fetch = FetchType.LAZY) 不工作的主要内容,如果未能解决你的问题,请参考以下文章

Java学习路线|转至CodeSheep

easypoi $fe和fe的区别

Apache Doris FE配置参数

Apache Doris FE配置参数

三星S21 FE 参数配置 三星S21 FE评测

MA8601 pin√pin替代汤铭FE1.1s无须更改电路板|完美替代FE1.1s方案