2011-09-16 13 views
3

これは多くの場所でカバーされていたはずです。しかし、私はそれが単純な方法で覆われている場所を見つけることができません。jsonizeに遅延ロードされたオブジェクトしかフェッチしないようにする方法はありますか?

コントローラで私が人物オブジェクトを返すとき、ジャクソンは大文字と小文字をシリアル化しようとします。私はここにケーステーブルを送る必要はありません。私はperson.setCase(null)を行うことができますが、これを行うためのよりよい方法が必要であると思います。それが取り出されていない場合、ジャクソンにケースをシリアル化しないように指示する方法はありますか?

私が直接あなたの質問にお答えしませんhbopojogen

@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE   }, mappedBy = "person" ) 
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) 
@Column(nullable = false ) 
@JsonManagedReference 
public Set<Case> getCase() { 
    return this.case; 

} 

@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY) 
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) 
@JoinColumn(name = "PERSON_ID", nullable = true) 
@JsonBackReference 
public Person getPerson() { 
    return this.person; 

} 

    public @ResponseBody Person searchPersonByCode(@RequestParam String codeString){ 

     int code = Integer.parseInt(codeString); 
     Patient person = this.personDao.getByCode(code); 

     return person; 
    } 

おかげで、

答えて

1

はあなたがJackson Hibernate moduleをチェックアウトしたことがありますか? core jacksonはlib /フレームワーク特有の機能についてはほとんどできませんが、拡張モジュールは可能です。これは特に、遅延参照を解決しないという概念をサポートしています。

+0

ありがとう、これは私が必要としていたものとまったく同じです。それはあまりにも複雑に見えたので、私はこれを避けていました。しかし、私はそれを試した。それは簡単だった。ありがとうございます – precursor

+0

ええ、何も複雑な、それは単なるオプションの機能を提供するモジュール化された方法です。ブラウザのようなシンプルなプラグイン – StaxMan

1

によって作成されたこれらのような1対多の関係でのPOJOの束を持っています。代わりに、私はあなたにあなたがそれが行われるかもしれないと思う方法を変えるようにあなたに説得しようとします。
問題は、明示的にフェッチされなかったときに大文字と小文字が直列化されないようにすることです。私はJacksonがあなたのオブジェクトを直列化するときにLazyInitializationExceptionを取得していると推測しています。この問題を回避しようとするのではなく、以下の2つの解決策が良くないと考えるようにしてください:
解決策1:セッションを開いて見せてください。 Jacksonは常に「ケース」をシリアライズすることができます。
解決策2:あなたが矛盾しないようにしようとしないし、特別な機会で異なるアプリケーションを動作させることを試みてはいけないものは何でも@JsonIgnore

と注釈「ケース」。設計に自明性を導入し、アプリケーションのメンテナンスをより困難にします。

乾杯

+0

返信いただきありがとうございます。私は「オープンセッション」を試みました。しかし、私はFAIL_ON_EMPTY_BEANSというエラーが出ます。しかし、なぜ私がケースベースで行うべきではないのか、理由は分かりません。私は時々子供のテーブルからのデータを必要とするかもしれません。しかし、すべての時間ではありません。だから、必要ではない時にジャクソンをフープに通すのはなぜですか? – precursor

関連する問題