gpt4 book ai didi

java - Apache Wicket、OpenJPA 和 Spring/ROO

转载 作者:行者123 更新时间:2023-11-30 05:09:35 25 4
gpt4 key购买 nike

我已经设置了一个 Spring ROO 应用程序,将持久性设置为 OpenJPA 并创建了一些实体。然后我用 Apache Wicket 替换了 Spring MVC。一切似乎工作正常,我已经成功显示了客户实体列表。

接下来是客户的编辑 View 。现在,我已经制作了一个直接使用 OpenJPA 实体作为表单模型的 Wicket 表单,因此我必须使实体类实现 Serialized。

现在,我不确定如何正确实现 OpenJPA 持久性,我现在得到的是:

@Override
protected void onSubmit() {
try {
if (customer.getId()!=null) {
customer.merge();
}
else {
customer.persist();
}
}
catch (Exception e) {
throw new Error(e);
}
super.onSubmit();
}

这可行,但每个 Customer 对象只能使用一次。不知何故。也就是说,我提交表单一次,它适用于新客户 (.persist()) 和现有客户 (.merge())。但是,我为同一个客户再次提交表单,但出现此错误(我在此处添加了一些换行符):

<openjpa-2.0.0-r422266:935683 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException:
An optimistic lock violation was detected when flushing object instance "no.magge.iumb.domain.crm.PrivateCustomer-379" to the data store.
This indicates that the object was concurrently modified in another transaction.

我的问题是,坚持使用 OpenJPA 的正确方法是什么?为什么我会收到该错误?

Wicket-wise:我是否应该使用可分离的客户模型创建一个单独的 Wicket IModel,这可能是我遇到这些问题的原因吗?

非常感谢您的建议!

最佳答案

帮自己一个忙,分离你的应用程序层。 View 中的代码永远不应该访问数据库。

创建一个 Service 层和/或一个 Dao 层,对这些层的代码进行单元测试以查看它们是否正常工作,然后将 dao 或服务对象注入(inject)到 wicket 组件中。 (我建议您使用 spring,但您也可以手动执行)

根据您的场景,有很多不同的事情可能会在一个地方失败,而且几乎不可能将它们分开。

这里有一些提示:

关于java - Apache Wicket、OpenJPA 和 Spring/ROO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3914502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com