Я пробую openjpa и jpa. Все, что у меня есть, это один класс сущностей в качестве соответствующей таблицы в базе данных. одним из атрибутов объекта является имя пользователя, а соответствующая строка в таблице базы данных имеет varchar2 (20). и в моем основном методе я пытался сохранить и экземпляр объекта с именем пользователя длиннее 20. Все, что я делаю, это

em.getTransaction().begin();
em.persist(entity); //entity here is the instance with the username longer than 20
em.getTransaction().commit();

Я попробовал это, надеясь получить какое-то другое исключение, но я не понимаю, почему я получаю исключение optimisticklock.

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

Кто-нибудь знает, что здесь происходит?

0
BeeRung 11 Мар 2011 в 21:14
Как насчет публикации всей трассировки стека и вашей сущности? Какая версия OpenJPA? Как вы улучшаете свои Сущности?
 – 
Rick
13 Мар 2011 в 21:02

1 ответ

Не уверен, почему это происходит... Я заметил, что исключение OptimisticLockException может возникать в странных случаях...

Добавление поля версии в вашу таблицу и объект часто может улучшить работу OpenJPA с блокировкой...

В свой объектный компонент добавьте это (также добавьте столбец с именем VERSION в свою таблицу):

private Long version;
@Version
@Column(name="VERSION") 
public Long getVersion() {
    return version;
}
public void setVersion(Long version) {
    this.version = version;
}

Надеюсь это поможет...

0
criel 11 Мар 2011 в 22:16
Нет, это не сработало. Я пробовал это, если я использую правильные данные, все работает отлично. Предположим, если сохранить новый экземпляр, он работает хорошо, и для версии установлено значение 1. Затем, если извлечь строку и внести некоторые изменения, снова все работает хорошо, и версия автоматически увеличивается до 2.
 – 
BeeRung
12 Мар 2011 в 08:36
Извините, по ошибке нажал Enter. И при попытке сохранения и экземпляра с недопустимыми данными (например, поле со значением, строка, с символами более 20) снова выдается одно и то же исключение OptimisticLockException. Я думал, исключение более подходящее было бы мне полезно.
 – 
BeeRung
12 Мар 2011 в 08:40