CLOB にマップされた 1 つのフィールドを持つエンティティがあります。
// Entity variable
@Lob
private String payload;
-- DDL
CREATE TABLE "MYENTITY" (
"PAYLOAD" CLOB,
...
);
このエンティティを Hibernate で永続化すると、小さな文字列 (<1MB) ではうまく機能しますが、1MB を超える文字列は機能しません。DB2 は値が大きすぎる (SQLCODE=-302、SQLSTATE=22001) と文句を言っていますが、私の知る限り、CLOB は 2GB 程度になる可能性があります。列の長さ制限はまったく定義していません。
質問: ここで何が欠けていますか? 透けて見えない長さの制限や最大サイズのフィールドはありますか?
この問題を解決する手がかりに感謝します。
DB: IBM DB2 9.7 LUW JPA: 休止状態 3.3.2
スタックトレース:
org.hibernate.exception.DataException: could not insert: [com.example.MyEntity]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:100)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:646)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:620)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:624)
at
org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
... 110 common frames omitted
Caused by: com.ibm.db2.jcc.am.eo: DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=4.7.85
at com.ibm.db2.jcc.am.dd.a(dd.java:668) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.dd.a(dd.java:60) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.dd.a(dd.java:127) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.nm.c(nm.java:2493) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.nm.a(nm.java:1977) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.t4.db.n(db.java:801) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.t4.db.i(db.java:258) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.t4.db.c(db.java:53) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.t4.t.c(t.java:44) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.t4.sb.i(sb.java:147) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.nm.ib(nm.java:1972) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.om.b(om.java:3553) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.om.Yb(om.java:710) ~[db2jcc4.jar:na]
at com.ibm.db2.jcc.am.om.executeUpdate(om.java:689) ~[db2jcc4.jar:na]
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)