Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openjpa抛出异常_Jpa_Openjpa_Optimistic Locking - Fatal编程技术网

openjpa抛出异常

openjpa抛出异常,jpa,openjpa,optimistic-locking,Jpa,Openjpa,Optimistic Locking,我正在尝试openjpa和jpa。我只有一个实体类作为数据库中的对应表。实体的属性之一是username,db表中相应的行具有varchar220。在我的主要方法中,我试图持久化用户名大于20的实体实例。 我所做的就是 em.getTransaction().begin(); em.persist(entity); //entity here is the instance with the username longer than 20 em.getTransaction().commit()

我正在尝试openjpa和jpa。我只有一个实体类作为数据库中的对应表。实体的属性之一是username,db表中相应的行具有varchar220。在我的主要方法中,我试图持久化用户名大于20的实体实例。 我所做的就是

em.getTransaction().begin();
em.persist(entity); //entity here is the instance with the username longer than 20
em.getTransaction().commit();
我尝试了这个,希望得到一些其他类型的异常,但我不知道为什么我会得到异常

我没有任何锁定设置。我的意思是我正在使用锁定属性的默认值


有人知道这里发生了什么吗?

不知道为什么会发生这种情况……我注意到乐观锁异常可以在奇怪的情况下抛出

在表和实体中添加一个版本字段通常可以使OpenJPA更好地使用锁定

在您的实体bean中添加此项,并将名为VERSION的列添加到表中:

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

希望这有帮助……

不,它不起作用。我试过了,如果我使用正确的数据,效果会很好。假设,如果持久化一个新实例,它工作正常,并且版本设置为1。接下来,如果检索该行并进行一些更改,它同样工作正常,版本会自动增加到2。抱歉,错误地按enter键。并且,当尝试持久化并使用无效数据(例如值为、字符串为、字符数超过20的字段)执行实例时,它再次抛出相同的OptimisticLockException。我在想,一个更合适的异常会对我有帮助。你发布整个堆栈跟踪和实体怎么样?什么版本的OpenJPA?您如何增强您的实体?