0

ユーザーのドキュメント オブジェクトを格納するだけのエンティティを定義しています。オブジェクトは、PNG や JPG 画像などのバイナリ (BLOB) の場合もあれば、RTF テキスト ファイルや MIME text/* タイプなどの文字ベースの場合もあります。すべてのドキュメントは、同じ名前空間で一意の ID を持っています。プロパティはおおよそ次のようになります。

@Id private long id;
@Column private String type;
@Lob private byte [] rawData;

rawData をバイト [] から String にオンデマンドで変換するアクセサ メソッドをいくつか提供することもできますが、文字データの場合に頻繁な変換ステップを回避する手法はありますか? JPAプロバイダーにもそれをさせたくないことに注意してください.1つのテーブル列を使用して、文字データまたはバイナリデータのいずれかを、エンティティインスタンスに挿入されるときに最小限の、またはまったく転写オーバーヘッドなしで格納したいと考えています。

次のように、基本クラスと 2 つのサブクラスをコーディングできるはずだと思います。

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING)
public class Document {
    @Id private long id;
    @Column private String type;
}

@Entity
@DiscriminatorValue("binary")
public class BinaryDocument extends Document {
    @Column @Lob private byte [] binaryData;
}

@Entity
@DiscriminatorValue("text")
public class TextDocument extends Document {
    @Column @Lob private String textData;
}

(簡潔にするためにアクセサーメソッドは省略)

これを理解すれば、2 つの @Lob 列binaryDatatextDataを持つテーブルになります。それらを同じ列にする方法はありますか?

それとも気にする必要がありますか?2 つの列 (クラスの各インスタンスで使用される列は 1 つだけ) を持つためのスペース要件は最小限でしょうか?

それとも、まったく別のアプローチをとるべきですか?私はまだこれをコーディングするのに多くの時間を費やしていないので、提案をお待ちしています。

4

0 に答える 0