java - Hibernate 的 @DynamicUpdate 是否可以与 Blob 一起使用?

标签 java hibernate blob

我正在使用 Hibernate 4.2.3,并且我有一个类似于以下内容的类:

@Entity
@DynamicInsert
@DynamicUpdate
@SelectBeforeUpdate
public class Test {

    @Id
    private BigInteger theId;

    @Lob
    @Basic(fetch = FetchType.LAZY)
    @JsonIgnore
    private Blob data;

    @Lob
    @Basic(fetch = FetchType.LAZY)
    @JsonIgnore
    private Blob otherData;

    // Getters and setters....


}

为更新生成的 sql 包含 data 列,即使它没有更改。 (准确地说,我所做的是获取对象,分离它,读取 data 并使用它生成 otherData,设置它,然后调用 saveOrUpdate 在 session 中。)

谁能解释一下为什么会发生这种情况?此功能可以与 Blob 一起使用吗?我搜索了文档但没有找到。

PS 出于性能原因,我没有使用 @DynamicUpdate。我知道从这个角度来看使用它是有问题的。

最佳答案

实现真正的 Lob 延迟加载的最安全、最可移植(在不同数据库和 JPA 提供程序之间)的方法是创建 an artificial lazy one-to-one association在原始实体和您将 Lob 移动到的新实体之间。

这种方法也适用于其他类型的优化,例如当我想启用复杂实体的二级缓存,但实体的几列更新频繁时。然后,我将这些列提取到一个单独的非二级可缓存实体。

但是,请记住一般性的 pitfalls特定于一对一关联。基本上,要么将其映射为与 @PrimaryKeyJoinColumn 强制(可选= false)一对一关联,要么确保外键位于实体(表)中声明惰性关联(在本例中是 Lob 被移出的原始实体)。否则,该关联可能实际上是急切的,从而违背了引入它的目的。

关于java - Hibernate 的 @DynamicUpdate 是否可以与 Blob 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346576/

相关文章:

java - Java 8的回调机制

java - (1+N) 选择与 OnetoOne 关联

mysql - Hibernate未插入到mysql : showing insert statements

java - 如何使用 AliasToEntityMapResultTransformer 获取订单映射?

php - 尝试选择/检索 blob pdo php mysql 时内存不足

sql-server - SSIS Azure BLOB/DW 上传任务错误

java - XACML 响应不适用

java - 声明变量的最佳方式

java - 无法为 hibernate 项目创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

angular - 如何导航到外部 URL 参数?