3

永続化されないクエリ可能なコレクションをエンティティに含めたいと思います。言い換えれば、一時的な多対多の関係です。私が試してみました:

@Transient
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="QuestionSetClass_Link", schema = "SVY",
        joinColumns={@JoinColumn(name="QuestionSetID", referencedColumnName="QuestionSetID")},
        inverseJoinColumns={@JoinColumn(name="QuestionSetClassID", referencedColumnName="ID")})
private Collection<QuestionSetClass> questionSetClasses;
public Collection<QuestionSetClass> getQuestionSetClasses(){
    return questionSetClasses;
}
public void setQuestionSetClasses(Collection<QuestionSetClass> questionSetClasses){
    this.questionSetClasses = questionSetClasses;
}

ただし、EclipseLinkはそれをデプロイせず、次のエラーが発生します。@Transientが指定されているフィールドまたはプロパティにマッピングアノテーションを適用することはできません。[フィールドquestionSetClasses]はこの制限に違反しています。

誰かがこれを処理するための最良の方法を教えてもらえますか?

4

3 に答える 3

0

一時アノテーションとは、Java オブジェクトのアノテーション付きフィールドに属するデータベース列 (または結合テーブル) がないことを意味します。したがって、@Transient@ManyToMany注釈の両方をフィールドに追加することは矛盾しています。

于 2013-01-31T08:14:28.540 に答える
0

あなたはとても混乱しているようです。関係を持つことはできませんし、持たないこともできません。あなたは何をしようとしているのですか?

@Transient または Java transient は、JPA がフィールドとその注釈を完全に無視することを意味します。

フィールドを照会したいようですが、永続化しませんか? これは非常に奇妙です。では、関係はどのように定義されるのでしょうか? 何も変更/追加しないと、何も永続化されないことに注意してください。オブジェクト モデルをデータベースの状態と同期させることを強くお勧めします。

双方向の ManyToMany を使用している場合、一方の側で mappingBy を使用する必要があり、事実上読み取り専用になり、読み取りを許可しますが、永続化では無視されます (ただし、維持する必要があります)。EclipseLink では、DescriptorCustomizer を使用して ManyToMany を読み取り専用としてマークし、マッピングを読み取り専用に設定することもできます。

EclipseLinkは、オブジェクト・モデルに存在しない場合でも、リレーションシップの結合/問合せを可能にするManyToManyQueryKeysもサポートしています。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Query_Keysを参照して ください。

于 2013-01-31T13:55:09.567 に答える