在JPA中,如何定义可以存储CLOB或BLOB的表列

时间:2012-09-14 00:31:22

标签: jpa-2.0 eclipselink

我正在定义一个只为用户存储文档对象的实体。有时对象是二进制(BLOB),例如PNG或JPG图像,有时它是基于字符的,例如RTF文本文件或MIME文本/ *类型。所有文档在同一名称空间中都有唯一的ID。这些属性大致如下:

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

现在我可以提供一些可以根据需要将rawData从byte []转换为String的访问器方法,但是有一种技术可以避免在字符数据的情况下频繁转换步骤吗?请注意,我不希望JPA提供程序也这样做 - 我希望使用一个表列来存储字符数据或二进制数据,当它被注入实体实例时,其转录开销很小或没有。

我想我应该能够编写一个基类和两个子类,如下所示:

@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;
}

(为简洁省略了存取方法)

如果我理解这一点,我最终会得到一张包含两个@Lob列的表格, binaryData textData 。有没有办法让它们成为同一列?

或者我应该关心?具有两列(在类的每个实例中只使用其中一列)的空间要求是否最小?

或者我应该采取完全不同的方法?我很乐意接受建议,因为我还没有花太多时间来编码。

0 个答案:

没有答案