我们已将我们的应用程序从JBoss 5.1.0 GA迁移到WildFly 8.2.0,为实现这一目标,我们已将技术升级到以下版本。
JBoss Seam 2.2.0 to Seam 2.3.1
Hibernate 3.3.0 to 4.0.1
JSF 1.2 to 2.1
我们可以加载所有页面并成功保存数据。但是,当我们使用EntityHome时,我们无法更新数据。
我使用h:commandButton来保存数据
<h:commandButton id="save"
styleClass="button"
value="Save"
action="#{userDetailMgr.doPersist}"
rendered="#{!userDetailHome.managed}"/>
<h:commandButton id="update"
styleClass="button"
value="Save"
action="#{userDetailMgr.doUpdate}"
rendered="#{userDetailHome.managed}"/>
userDetailHome如下所示
@Name("userDetailHome")
public class UserDetailHome extends
EntityHome<UserDetailHome> {
//Override the isManaged() method to identify the results
@Override
public boolean isManaged() {
System.out.println("Managed Value " + super.isManaged());
return super.isManaged();
}
}
userDetailMgr如下所示
@Name("userDetailMgr")
@Scope(ScopeType.SESSION)
public class UserDetailMgr extends AbstractManager
implements Serializable {
@In
EntityManager entityManager;
public String doUpdate() {
userDetailHome.update();
}
public String doPersist() {
userDetailHome.persist();
}
}
基于UserDetailHome中的sysout isManaged()我观察到在加载页面时,我们得到正确的值(true),在EntityHome的getInstancc()中加载所选日期。 加载页面后,EntityHome中的值不再可用。
当我们尝试更新(任何操作)数据时,我们没有获得在页面加载时加载的所选实例,它正在为新实例提供主键为null。由于所选实例在getInstance()中不可用,因此它将被视为新条目而不是更新现有条目。
以下是components.xml
中的配置<persistence:managed-persistence-context auto-create="true"
name="entityManager"
persistence-unit-jndi-name="java:/projectEntityManagerFactory" />
在persistence.xml中
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/projectEntityManagerFactory" />
<property name="hibernate.transaction.jta.platform"
value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
我怀疑这个问题是由于迁移了接缝版本。
如果我遗漏了任何东西,请告诉我。
答案 0 :(得分:0)
我解决了这个问题。之前我们使用的是JSF 2.1.29,现在我将我的JSF降级为2.1.7,这是由Seam 2.3.1提供的。