java - CrudRepository delete 是否也删除了 Blob 字段的底层大对象

我有一个带有 @Lob 注释的 Blob 字段的实体:

@Entity
public class Entry {

    @Id
    @GeneratedValue
    private Long tid;

    @Lob
    private Blob content;
}

内容 是使用 Hibernate 的 LobCreator 创建的然后使用 JPA 保存实体 CrudRepository :

public Entry save(Entry template, InputStream source) {
    Session session = entityManager.unwrap(Session.class);
    content = Hibernate.getLobCreator(session).createBlob(source);
    template.setContent(content);
    return entryRepository.save(template);
}

当使用 PostgreSQL 作为基础数据库时,给定 Entrycontent 列将不包含实际的大对象本身,而是一个 oid 引用

假设我现在正在使用 CrudRepository delete 给定的实体 我想知道我是否可以确定不仅行本身会被删除,而且大的对象,或者如果我留下一个孤立的大对象。

我可以使用 PostgresSQL specific functionality 解决这个问题但如果可能的话,我想坚持使用与数据库无关的 Hibernate 方法。

最佳答案

public class FileData {

    @Lob
    @Column(name = "file_data")
    private Blob fileDataBlob;

    public void freeFileDataBlob() throws SQLException {
        if (this.fileDataBlob != null){
            this.fileDataBlob.truncate(0L);
            this.fileDataBlob.free();
            this.fileDataBlob = null;
            LOG.info("freeFileDataBlob() successful");
        }
    }

}

https://stackoverflow.com/questions/57168773/

相关文章:

php - 在电子邮件中添加 PhpSpreadsheet 附件

angular - ionic 4 : Ion-checkbox checked not updat

reactjs - 使用重新选择选择器时无法提供/测试传奇

javascript - 使用 axios 向服务器发出请求会卡住 React Native 应用程

javascript - 防止在 body 上滚动(Matter.js)

firebase - 我应该使用 Firebase 动态链接而不是通用链接和应用链接吗?

c# - Process.Start 无法正确运行批处理文件

swift - 如何使用 AVAudioEngine 在同一时间更改音调和速率

node.js - 如何在模块加载到 NodeJS 之前获取和使用 Secret Manager 值

amazon-web-services - 使用 aws sts assume-role 配置 AW