如何以与实现无关的方式在JPA中创建Clob

kaz*_*aki 23 java hibernate jpa clob

我正在使用Ejb3和JPA(目前基于Hibernate和Oracle 10g)

我有一个包含clob的实体

@Entity
@Table(name = "My_TAB")
public class ExampleEntity implements java.io.Serializable {

    private Clob someText;

    public void setSomeText(Clob someText) {
        this.someText= someText;
    }

    @Column(name = "COLUMN_NAME")
    public Clob getSomeText() {
        return this.someText;
    }
Run Code Online (Sandbox Code Playgroud)

然后我想保存这种类型的实体.

目前我正在做以下工作,完美无缺

ExampleEntity exampleEntity = new ExampleEntity();
exampleEntity.setSomeText(Hibernate.createClob(aStringValue));
someOtherDao.save(exampleEntity);
Run Code Online (Sandbox Code Playgroud)

然而,这将我的代码与Hibernate联系在一起!到目前为止,我已经特别避免了Hibernate扩展,只使用了JPA注释.代码有效,因为Hibernate确实是我当前的实现.

是否有某种JPA API允许我以通用方式创建clob?所以,如果以后我决定切换到Toplink/EclipseLink或其他东西我不需要改变一件事情?

ewe*_*nli 41

有一个例子是JPA规范(第9.1.5节)

@Column(name="DESC", 
columnDefinition="CLOB NOT NULL", 
table="EMP_DETAIL") 
@Lob 
public String getDescription() { return description; }
Run Code Online (Sandbox Code Playgroud)

我相信这是CLOB的标准方式.

  • 它不适用于"Oracle 11g R2" - 我的列定义是@Column(columnDefinition ="CLOB NOT NULL")@Lob private String notes; 但Oracle始终将列创建为"CLOB(4000)".我错过了什么吗?我正在使用"Hibernate 3.2.0-Final"版本(使用JBoss 6.0-Final). (3认同)