2

ばかげた質問:JPAで可能であるように、JDBCでPOJOを永続化することは可能かどうか疑問に思います。

1つのフィールドを含むクラス「A」があるとしましょう

public class A implements Serializable{

    public String someString = "asd";
}

Aここで、 ( )のインスタンスがあるとしましょうA myA = new A();

私の質問は次のとおりです。JDBCで「myA」を永続化することは可能ですか、それとも文字列を永続化する必要がありますか。または、「myA」をロードする場合、インスタンス「myA」をロードできますか、または文字列をロードして「myA」を構築し、ロードされた文字列を使用して新しいインスタンスフォームAを作成する必要がありますか。

4

3 に答える 3

2

シリアル化されたJavaオブジェクトをデータベースに保存できます。たとえば、Blobタイプを使用します。

しかし、それは一般的に良い考えではありません:

  • シリアル化されたオブジェクトの状態を重要な方法でテストするSQLクエリを実行することは実用的ではありません。

  • シリアル化されたオブジェクトは、オブジェクトのコードの変更に敏感になる傾向があります。これに対処するのは厄介な場合があり、対処しないと、データベース内にシリアル化されたオブジェクトが残り、それ以上逆シリアル化できなくなる可能性があります。

POJOをリレーショナルデータベースに永続化する場合は、JPAやHibernateなどのオブジェクトリレーショナルマッピングを使用することをお勧めします。

于 2012-11-18T14:09:26.790 に答える
1

何らかの方法でマッピングを行う必要があります(永続化する前と取得時に)。

1つの方法は、手動でマッピングを実行できるfillXを呼び出すメソッド(Javaコード)を作成するか、DBの列を持つクラスの名前のような何らかの規則を作成することです。

これは、たとえばSpringJDBCでうまく実行されます。ドキュメントでは、誰が何をしているのかを確認できます。

ほとんどの場合、JPAのようなオブジェクトリレーショナルマッピングを使用するのが最善の方法ですが、それが常にオプションであるとは限りません。

于 2012-11-18T14:05:14.120 に答える
0

一般に、JDBCを使用してバイトストリームを永続化できます。この場合、BLOBを使用する必要があります(テキストストリームの場合は、CLOBを使用します)。

したがって、クラスAが実際にSerializableインターフェイスを実装している場合は、それをバイトストリームにシリアル化して保存できます。

ただし、代わりに文字列を保存することをお勧めします。これは、BLOB/CLOBでの作業が文字列での作業よりもかなり遅いという事実によるものです。

お役に立てれば

于 2012-11-18T13:59:11.067 に答える