1

次のようなエンティティ クラスを実装します。

@Entity
public class XXXEntity {
     @Id
     private Long id;

     private Object entity;
}

しかし、オブジェクト タイプ フィールドをマッピングする方法がわかりません。

実際、私のプロジェクトでは、オブジェクト型には、A、B、C などの他のいくつかのエンティティが含まれています (すべての A、B、および C は Serilizable インターフェイスを実装しています)。

@Lob としてアノテーションを付けたいのですが、それが正しいかどうかわかりません。Object は Serilizable インターフェイスを実装していないためです。

それについてのアイデアはありますか?ありがとう。

4

4 に答える 4

0

オブジェクトフィールドに@Lobとして注釈を付けることはできません。仕様によると、「ロブはバイナリタイプまたは文字タイプのいずれかです。」

于 2012-07-31T08:05:00.400 に答える
0

「Entity」ではなく「ValueObject」(シリアル化可能であると述べたように)として使用したいようです。

フィールドを ValueObject として扱えば問題ありません。Lob を使用しても問題ありません (手動でシリアル化することで、いつでも回避策を見つけることができます)。

しかし、それらを「Entity」として扱いたい場合、それを「Object」への参照として宣言することは決して合理的ではありません。最も明白な議論の 1 つは、オブジェクトにはエンティティ ID が含まれていないため、オブジェクトはエンティティではないということです。

于 2012-08-03T01:40:36.067 に答える
0

いいえ、@Lob で注釈を付けるのは正しくありません。永続属性として任意のオブジェクトに直接注釈を付けることはできません。JPA プロバイダーは、それを永続化する方法を知る方法がありません。

JPA 2.0仕様によると、永続属性は次のいずれかである必要があります。

Java プリミティブ型。java.lang.String; その他の Java 直列化可能型 (プリミティブ型のラッパー、java.math.BigInteger、java.math.BigDecimal、java.util.Date、java.util.Calendar[5]、java.sql.Date、java.sql.Time を含む) 、java.sql.Timestamp、byte[]、Byte[]、char[]、Character[]、および Serializable インターフェイスを実装するユーザー定義型); 列挙型; エンティティ タイプ; エンティティ タイプのコレクション。埋め込み可能なクラス; 基本型と埋め込み型のコレクション。

基本的に型のないデータを保持する必要がないように、モデルを再設計する必要があります。

于 2012-07-31T07:55:55.410 に答える