0

次のような Embeddable クラスがあります。

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; }

エンティティを更新しているとき、および/またはそれがクロブの休止状態である場合、Embeddable のすべてのフィールドが存在する更新/削除 SQL クエリが生成されます。なぜこれを行うのかは理解していますが、この場合はあまり良くありません.HibernateはCLOB値を演算子=と比較しようとするので、どうにかしてhibernateにフィールド値(CLOB)を無視し、チェックサム(この目的のために作成されたもの)のみを使用するように指示できますかこれは clob から計算された md5 ハッシュなので、クエリの where 句で比較するには十分です。または、これを解決する方法を他に考えていますか?

4

0 に答える 0