web-dev-qa-db-ja.com

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

次に、このタイプのエンティティを保存します。

現在、私は次のことを行っています完全に

ExampleEntity exampleEntity = new ExampleEntity();
exampleEntity.setSomeText(Hibernate.createClob(aStringValue));
someOtherDao.save(exampleEntity);

ただし、これによりコードがHibernateに関連付けられます。ここまでは特にHibernate拡張を避け、JPAアノテーションのみを使用しました。実際、Hibernateが現在の実装なので、コードは機能します。

一般的な方法でCLOBを作成できるようにする、なんらかのJPA APIはありますか?では、後でToplink/EclipseLinkなどに切り替えることにした場合、変更する必要はありませんか?

24
kazanaki

そのような例がJPA仕様(§9.1.5)です。

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

CLOBの標準的な方法だと思います。

42
ewernli