1

Set<Reference>このようにマッピングされた埋め込み可能なクラスがあります。

@ElementCollection
@ForeignKey(name = "fk_object_org_ref")
@CollectionTable(name = "m_object_org_ref", joinColumns = {
    @JoinColumn(name = "object_oid", referencedColumnName = "oid"),
    @JoinColumn(name = "object_id", referencedColumnName = "id") })
@Cascade({ org.hibernate.annotations.CascadeType.ALL })
public Set<Reference> getParentOrgRef() {
    return parentOrgRef;
}

参照は次のようにマッピングされます。

@Embeddable
public class Reference implements Serializable {

    @Column(length = 36, insertable = true, updatable = true, nullable = true)
    public String getTargetOid() {
        return targetOid;
    }

    @Lob
    @Type(type = "org.hibernate.type.TextType")
    public String getDescription() {
        return description;
    }

    @Enumerated(EnumType.ORDINAL)
    public RContainerType getType() {
        return type;
    }

    @Lob
    @Type(type = "org.hibernate.type.TextType")
    public String getFilter() {
        return filter;
    }
    ...other methods/fields...
}

親エンティティをマージしようとすると (たとえば、セットから 1 つの参照を削除すると)、休止状態はマージ中にこの sql を準備済みステートメントとして生成します...

delete from reference where object_id=? and object_oid=? and description=? and filter=? and localPart=? and namespace=? and targetOid=? and type=?

しかし、たとえば説明が次のNULL場合、この削除は失敗します。より正確には、where句が適切ではないため、レコードを削除しません(description=null適切な方法は ですdescription is null)。では、「より良い」SQL削除を作成する必要があることをhiberateに伝えるにはどうすればよいですか?

すべてのフィールドに null 以外の値がある場合にのみ機能します。

4

0 に答える 0