2010-12-06 9 views
3

BlazeDSは、ゲッターとセッターの両方を持たない限り、プロパティをシリアル化しません。しかし、私のJavaプロパティの多くは読み取り専用です。したがって、私はアンマーシャリングプロセスをサポートするセッターを追加する必要があります。これらのドメインオブジェクトのユーザーのいずれかがこれらのセッターの呼び出しを開始すると、これらのオブジェクトのバリューオブジェクトの意味が破られ、あらゆる種類のシステム問題が発生する可能性があります。不要なBlazeDS&JPAのJavaプロパティーセッターの作成を停止するにはどうすればいいですか?

私は過去にJPAの特定の側面をサポートするために多くのことをしなければなりませんでした。これは、JPAアノテーションをプライベートフィールドではなくプロパティに置くためです(別の問題を回避するため)。

自分自身や他人に警告するためにJavadocを使用する以外に、プログラマは何をするべきですか?

編集:これらの余分なセッターは、これらのオブジェクトが実装するパブリックインターフェイスの一部ではありませんが、それでもなお存在します。

+0

"これは私たちのJPAアノテーションをプライベートフィールドではなくプロパティに置いたからです(別の問題を避けるためです)" - もう1つの問題は何ですか? –

+0

問題は、型でJavaジェネリックを使用していたマップされたスーパークラスのプライベートフィールドでした(例えば、 'private list myProp;')。 http://stackoverflow.com/questions/2808251/how-to-handle-jpa-annotations-for-a-pointer-to-a-generic-interfaceこれらの宣言は、JPA注釈をサポートしていません。 – HDave

答えて

1

いくつかの選択肢があります:独自のシリアル化メカニズムを使用するか、またはBlazeDSバージョン4を使用します。私はそれに関連した小さな記事を書いています。リンクはhttp://cornelcreanga.com/2009/09/blazeds-amf-and-read-only-properties/です。

+0

素晴らしい記事。 BlazeDS 4に関して、リリースノートへのWebリンクはありますか?また、私はBlazeDS 4で動作するspring-flex 1.5.0-M1を参照していますが、いずれのMavenリポジトリでも見つからない...手動でNexusに追加する必要はありますか?ありがとう! – HDave

+0

読書専用のプロパティのサポートに関するリリースノートとコメントが見つかりません:http://opensource.adobe.com/wiki/display/blazeds/BlazeDS+4.0+Release+Notes – HDave

2

@Access注釈を試すことができます。これは、クラスに対して使用されているアクセスタイプを列単位でオーバーライドするために使用されます。それがデータベースに行くとき、それはまた、このように、あなたのものと混乱をすることができます:

private String firstName; 

@Access(AccessType.PROPERTY) 
@Column(name="FIRST_NAME") 
protected String getFirstNameForDatabase() { 
    return "Mr. " + this.firstName; 
} 

この例で "クラスに使用されている 'フィールドのアクセスを無効にしますが、それはまた、データベースをしてコミットする原因となるだけでなく、 「氏」はその都度値の前に置かれます。これにより、JPAのコミットと検索を邪魔することなく、他の要件を満たす「ダミー」getters/setterを宣言することもできます。それを試して、これがあなたの問題の解決策を作るのに使用できるかどうかを見てください。

+0

私の場合、これらのプロパティのいくつかでAccessType.Fieldを使用すると、不要なJPAセッターを取り除くことができます。 BlazeDSセッターに関する考えはありますか? – HDave

+0

申し訳ありませんが、私はBlazeDSの経験がありません –

関連する問題