java - 如何使用 createRow() 将行添加到 View 对象后删除行

标签 java oracle commit oracle-adf

我有一个 View 对象,我创建了一行,如下所示:

ContactsVORowImpl person = ( ContactsVORowImpl ) getContactsVO().createRow();

然后我分配所创建行的一些属性,而其他属性则未分配(故意):

        person.setFirstname( "firstname" );
        //person.setLastname( "" );
        person.validate();

我收到验证错误,因为 Lastname 为空。

然后我无论如何都会提交,将该行插入 View 对象:

getDBTransaction().commit();

这里,由于 Lastname 为空,我得到以下异常:

  Exception Class:  class oracle.jbo.AttrValException,  Message: JBO-27014: The attribute Lastname in ContactsEO is needed.
| oracle.jbo.AttrValException: JBO-27014: The attribute Lastname in ContactsEO is needed.
  at oracle.jbo.server.JboMandatoryAttributesValidator.validate(JboMandatoryAttributesValidator.java:224)
  at oracle.jbo.server.EntityDefImpl.validate(EntityDefImpl.java:3200)
  at oracle.jbo.server.EntityCache.validate(EntityCache.java:3601)
  at oracle.jbo.server.EntityImpl.validateEntity(EntityImpl.java:2361)
  at oracle.jbo.server.EntityImpl.validate(EntityImpl.java:2540)
  at oracle.jbo.server.DBTransactionImpl.validate(DBTransactionImpl.java:4540)
  at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2035)
  at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2378)
  1. 既然我没有插入该行,怎么会发生这种情况?
  2. 我该如何解决这个问题?

我实际上正在做一个小组提交;我正在检测有缺陷的行,并且不将它们插入 View 对象中以避免提交。尽管如此,它还是试图 promise 它们;为什么?

最佳答案

文档指出:

Creates a new view row. The new row is not placed in the entity cache until its primary key is initialized. It is inserted into the database when changes are posted to database and the transaction is committed.

http://docs.oracle.com/cd/E12839_01/apirefs.1111/e10653/oracle/jbo/server/ViewObjectImpl.html#createRow()

最后一部分似乎说它已插入数据库,因此这就是您收到异常的原因。

解决方法:尝试调用 removeCurrentRow,但在此之前检查当前行是否是您刚刚创建的行。未经测试。

关于java - 如何使用 createRow() 将行添加到 View 对象后删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26257379/

相关文章:

Oracle Unified Directory 导入具有哈希密码的用户

eclipse - SVN 提交错误 "Commit can only commit to a single repository at a time."

java - FragmentTransaction.commit 上的 Activity 已被销毁

java - JavaFX 的 ListChangeListener.Change.getRemoved() 可以返回不连续的项目吗?

oracle - utl_file.FCLOSE() 对于大文件来说很慢

java - Android AsyncTask 错误,试图分配较弱的访问权限。

sql - 在Oracle sql中以T为状态的最后更改的数据

SVN 提交而不更新

java - 使用 ComputeIfAbsent 和 ComputeIfPresent 将列表放入映射中

java - 有什么解决方案可以解决这里产生的僵局吗?