我有一个带有 @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 作为基础数据库时,给定 Entry
的 content
列将不包含实际的大对象本身,而是一个 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
javascript - 使用 axios 向服务器发出请求会卡住 React Native 应用程
javascript - 防止在 body 上滚动(Matter.js)
firebase - 我应该使用 Firebase 动态链接而不是通用链接和应用链接吗?
c# - Process.Start 无法正确运行批处理文件
swift - 如何使用 AVAudioEngine 在同一时间更改音调和速率