2014-10-08 2 views
0

У меня есть объект вида и создать строку, как это:Как удалить строку после добавления к объекту вида с createRow()

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

Тогда я задаю некоторые свойства создаваемого ряда , оставляя другой Unassigned (сознательно):

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

Я получаю ошибки проверки жалуются, потому что Lastname является недействительным.

Тогда я коммиту, БЕЗ вставки строки в объект вида:

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. Как я могу обойти это?

Я на самом деле делаю групповое совершение; Я обнаруживаю дефектные строки и не вставляю их в объект вида, чтобы избежать фиксации. Тем не менее он пытается их совершить; Зачем?

+2

Что вам нужно? Вызов фиксации без фиксации? – Jens

+1

Мне нужно вызвать групповое коммитирование, чтобы зафиксировать другие созданные и вставленные строки, но не этот (ошибочные), поэтому почему я получаю сообщение об ошибке в этой фиксации, когда у нас даже нет вставленной строки. , , –

+0

Я не понимаю 2 близких голосов –

ответ

1

В документации говорится:

Создает новый вид строки. Новая строка не помещается в кеш сущности до тех пор, пока ее первичный ключ не будет инициализирован. Он вставляется в базу данных , когда изменения отправляются в базу данных и транзакция совершается.

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

Последняя часть, кажется, говорят, что он вставлен в базу данных, так что по этой причине вы получите исключение.

Обход проблемы: попробуйте позвонить removeCurrentRow, но перед тем, как проверить, является ли текущая строка строкой, которую вы только что создали. НЕ ИСПЫТАНО.

+1

Я пробовал это, и он дает исключение, говоря, что строка мертва –

Смежные вопросы