1

監査目的で、ユーザー テーブルとの ManyToOne 関係を含む永続クラスがあります。実際、すべてのクラスにこれらのフィールドがあり、User クラスも含まれます。

public class MyClass implements Serializable {

@Fetch(value=FetchMode.SELECT)
@ManyToOne(optional=false, fetch=FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "CREATE_USER_ID")
public User getCreatedBy() {
    return createdBy;
}

@Fetch(value=FetchMode.SELECT)
@ManyToOne(optional=false)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name="USER_ID")
public User getLastUpdatedBy() {
    return lastUpdatedBy;
}
}

これをさらに改善するために、ほとんどのテーブルの監査フィールドを CHAR(8) にしましたが、T_USER のフィールドは VARCHAR2(8) にしました。つまり、それらに外部キーを作成することはできません。

とにかく、MyClass のクエリはクエリを開始して監査フィールドにデータを入力し、次にクエリを開始してユーザーの監査フィールドにデータを入力します。

監査フィールドが必要になることはめったにないので、それらを遅延させたいと考えています。残念ながら、私はここで私に多くのことを働いていると思います。特に、スキーマの設計が不十分です。

誰か助けてくれませんか?

ジェイソン

4

1 に答える 1

2

@Fetch(value=FetchMode.SELECT) アノテーションと @ManyToOne(optional=false, fetch=FetchType.LAZY) が互いに戦っているようです。 @Fetch(value=FetchMode.SELECT) を削除しようとしましたかエンティティごとに fetch=FetchType.LAZY を両方の関連付けに追加しますか?

別の理由として、@NotFound アノテーションが optional=false アノテーション パラメーターと競合している可能性があります。1 つは、NULL が存在する可能性があると言い、もう 1 つは存在しないと言います。*toOne アソシエーションで null 値を使用できる場合、アソシエーションを NULL にできない限り、遅延読み込みを行うことはできないと思います。

于 2013-03-27T18:21:17.797 に答える