0

上記のように、永続呼び出しが失敗した場合、モデルを変更しました。これは、(現在は変更されていますが、例外のために実際には永続化されていない) モデルで作業していることを意味します。これが EntityListener ではなく Service レイヤー内にある場合、その特定のクラスの例外処理で DAO が呼び出される前に変更したプロパティを実際に元に戻すことができます。

このため、モデルへの変更Serviceは、「リスナー」ではなく「 」レイヤー オブジェクトに制限するのが最適です (リスナーは、使用する実際のモデル データではなく、保持したい追加情報にのみ使用する必要があります)。将来)?

4

1 に答える 1

2

問題はモデルの変更ではなく、変更のセマンティックです。Hibernate ドキュメントのこの例では、@PrePersist を適切に使用して、モデルを永続化する前にモデルから lastUpdate 日付を変更することがわかります。このメソッドは、メタデータとして修飾できるもののみを変更します。

public class LastUpdateListener {
    /**
     * automatic property set before any database persistence
     */
    @PreUpdate
    @PrePersist
    public void setLastUpdate(Cat o) {
        o.setLastUpdate( new Date() );
    }
}

ビジネスモデルのデータを変更したい場合は、サービスレイヤーをコードを配置する必要がある場所に配置する必要があります.

于 2013-10-21T11:42:14.130 に答える