我有看起来像这样的可嵌入类:
public class ClobEmbeddableValue {
...fields...
@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@Column(name = "clobValue")
@Override
public String getValue() { return value; }
public String getChecksum() { return checksum; }
...other getters/setters...
}
这在实体中用作
@ElementCollection
@ForeignKey(name = "fk_clob")
@CollectionTable(name = "m_clob", joinColumns = {
@JoinColumn(name = "owner_id"),
@JoinColumn(name = "owner_oid"),
@JoinColumn(name = "ownerType")})
@Cascade({org.hibernate.annotations.CascadeType.ALL})
public Set<ClobEmbeddableValue> getClobs() { return clobs; }
当我更新实体和/或它的 clob 时,休眠会生成更新/删除 SQL 查询,其中所有来自 Embeddable 的字段都存在。我理解它为什么这样做,但在这种情况下不是很好,因为 Hibernate 尝试将 CLOB 值与 operator = 进行比较我可以以某种方式告诉 hibernate 忽略字段值 (CLOB) 并且只使用校验和(为此目的创建它是从clob计算的md5哈希,所以它足以比较)查询中的where子句?或者你们有其他想法如何解决这个问题?