5

Rails にはserialize、データベースに保存されたときに自動的に json にシリアル化される属性 (または列) を取るメソッドがあります。

そのオブジェクトを保存してクエリを実行すると、シリアル化されたオブジェクト json に実際のクラス属性としてアクセスできるようになります。

私の質問は次のとおりです。この機能を休止状態に追加するビルドインまたはパッケージはありますか? 負の場合、リフレクション Java API を使用して動的に属性を作成することは可能ですか?

Java について少し勉強したり、JVM で何ができるかについて少し興味があるので、これについて質問しています。

ありがとう。

4

4 に答える 4

4

あなたが何を望んでいるのかよくわかりません、ごめんなさい。

しかし、別のテーブルの行を参照するようにマップされるのではなく、値がシリアル化された形式でデータベースに保存されるオブジェクトのフィールドが必要な場合、それは JPA の標準的な部分です。フィールドを定義するだけで、関係注釈で注釈を付けないでください。ただし、フィールドのタイプは のサブタイプでなければならないと思いSerializableます (残念ながら)。例えば:

@Entity
public class Colleague {
    @Id
    private int id;
    private HashMap<Date, String> diary;
}

これは、次のようなテーブルにマップされます。

create table Colleague (
    id integer primary key,
    diary blob
)

さて、あなたはJSONについて言及しました。これは JSON を使用しません。標準の Java シリアライゼーションを使用します。代わりに JSON を使用する特に適切な方法はないと思います。おそらく最も簡単な方法は、シリアル化するオブジェクトを JSONifying ラッパーでラップすることです。難しすぎるわけではありませんが、少し奇妙です。

それでも、これは JSON ではありませんが、同じように便利です。つまり、データはデータベースに入ってから戻ってきます。

繰り返しますが、これが本当にあなたが望むものかどうかわかりません。申し訳ありません!

于 2012-11-12T19:25:58.950 に答える
3

Jackson や Gson などの既存の JSON ライブラリを使用して、独自のカスタム ユーザー タイプを作成できます。

  1. jackson-hibernate-module : Jackson に基づく既存のライブラリ。遅延読み込みの概念をサポート
  2. カスタム JSON ユーザー タイプの作成。
于 2012-11-12T18:13:04.790 に答える
0

そのためにGsonライブラリを使用できると思います。json オブジェクトまたは java オブジェクトをシリアライズおよびデシリアライズできます。

XML ファイルの場合、XStreamライブラリを使用できます。

于 2012-11-12T18:14:40.497 に答える
0

Hibernate にそのようなツールがあるとは思いません。しかし、そのような動作をエミュレートする2つの方法があります

  1. エンティティで JPA @PrePersit メソッドを使用し、Json ライブラリを使用して値を再レンダリングします
  2. エンティティ メソッドで AOP を使用し、同じ方法で再レンダリングします。
于 2012-11-12T18:21:28.937 に答える