ADF如何保存Clob字段

需求是这样的:由一个后台程序去给数据库新增一条记录,其中有的字段是Clob类型的。该表的主键是Sequence生成。

1.建立Entity Object
其中ID的Type为oracle.jbo.domain.DBSequence

2.建立View Object

3.在ApplicationModule中引入这个View Object. 并创建方法写入数据库。
public void testForClob(){
MssExtCommReqLogVOImpl vo = this.getMssExtCommReqLogVO1();
MssExtCommReqLogVORowImpl row = (MssExtCommReqLogVORowImpl)vo.createRow();
row.setRequestName("test7");
try {
row.setReqMessage(new ClobDomain("bbb"));
} catch (Exception e) {
e.printStackTrace();
}
vo.insertRow(row);
vo.getDBTransaction().commit();
}
程序出错,并得到以下异常:
Exception in thread "main" oracle.jbo.RowAlreadyDeletedException: JBO-25019: Entity row with key null is not found in MssExtCommReqLogEO.
at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:879)
at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:566)
at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:8589)
at oracle.jbo.server.EntityImpl.doDMLWithLOBs(EntityImpl.java:8893)
at oracle.jbo.server.EntityImpl.doDML(EntityImpl.java:8797)
at oracle.jbo.server.EntityImpl.postChanges(EntityImpl.java:7017)
at oracle.jbo.server.DBTransactionImpl.doPostTransactionListeners(DBTransactionImpl.java:3301)
at oracle.jbo.server.DBTransactionImpl.postChanges(DBTransactionImpl.java:3104)
at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2108)
at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2389)
at com.emerson.testadf.main.model.am.AppModuleImpl.testForClob(AppModuleImpl.java:67)


解决方法:
编辑该Entity Object 的Id属性,在Refresh After 中选中Insert,保存, 若保存不成功,则手动修改xml文件上,在 Attribute Name="Id" 处加上RetrievedOnInsert="true"
再运行,成功。


分析: 在oracle中对Clob类型的字段操作需要先插入empty_clob(),然后再修改,ADF模拟这个动作,但是在插入后更新时没有到Id的值,所以引发上述的异常,若是将Entity Object中的属性修改为insert后更新就可以获得Id的值自动将其更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值