Java Hibernate 4 persist()工作,但merge()不工作

Java Hibernate 4 persist()工作,但merge()不工作,java,hibernate,transactions,Java,Hibernate,Transactions,我正在编写一个在Wildfly 8.2上运行并使用Hibernate 4的Web应用程序。我已经让它成功地持久化了一个新实体,但似乎无法让它在以后提交更改。我有点假设我的一些事务设置是错误的,但我不确定它是什么。我有一个服务层,在其中设置事务设置,该层调用DAO层。下面是一个例子: @Transactional @EnableTransactionManagement @TransactionManagement(value = TransactionManagementType.CONTAIN

我正在编写一个在Wildfly 8.2上运行并使用Hibernate 4的Web应用程序。我已经让它成功地持久化了一个新实体,但似乎无法让它在以后提交更改。我有点假设我的一些事务设置是错误的,但我不确定它是什么。我有一个服务层,在其中设置事务设置,该层调用DAO层。下面是一个例子:

@Transactional
@EnableTransactionManagement
@TransactionManagement(value = TransactionManagementType.CONTAINER)
@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
@DeclareRoles("Security Admin")
public class SecurityServiceBean
{
  @Override
  @PermitAll
  public UserRegistration confirmRegistration(
    String confirmationCode) throws ApplicationException
  {
    try
    {
      QueryResults<UserRegistration> userRegistrations = this.userRegistrationDAO
      .find(new UserRegistrationQuery(null, confirmationCode));

      if (userRegistrations.getTotalRecords() == 1)
      {
        UserRegistration userRegistration = userRegistrations.uniqueResult();

        if (userRegistration.getConfirmationDate() == null)
        {
          userRegistration.setConfirmationDate(new Date());
          userRegistration.setState(State.CONFIRMED);
          userRegistration =  this.userRegistrationDAO.saveOrUpdate(userRegistration);
          ...
        }
        ...
      }
    }
  }
}
以及映射的超类

@MappedSuperclass
public class AbstractUserRegistration extends CampaignerHistoryObject<Long>
{
  public static enum State {
    UNCONFIRMED, CONFIRMED, APPROVED, DENIED, 
  };

  private State             state;

  @Column(name = "STATE")
  public State getState()
  {
    return state;
  }
}
@MappedSuperclass
公共类AbstractUserRegistration扩展了ActivaterHistoryObject
{
公共静态枚举状态{
未确认、确认、批准、拒绝、,
};
私营国家;
@列(name=“STATE”)
公共状态getState()
{
返回状态;
}
}
这里是我使用的两个XML文件。第一个是beanRefContent.xml

<beans>
  <!--   <aop:aspectj-autoproxy proxy-target-class="true"/> -->
  <!--
    SpringBeanAutowiringInterceptor needs this file.
    We need SpringBeanAutowiringInterceptor to autowire the EJBs.
   -->
  <bean
    class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg value="classpath:campaignerContext.xml" />
  </bean>
</beans>

第二个是ActivaterContext.xml

<beans>
  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="campaigner" />
  </bean>

  <bean id="em" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>
</beans>

更新2:现在我开始认为我的问题在于persistence.xml文件,如下所示:

<persistence>
  <persistence-unit name="campaigner" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:/jdbc/CampaignerDS</jta-data-source>

    ...

    <properties>
      <property name="hibernate.dialect"                   value="org.hibernate.dialect.MySQLInnoDBDialect" />
      <property name="hibernate.transaction.jta.platform"  value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
      <property name="jta.UserTransaction"                 value="java:jboss/UserTransaction" />
      <property name="jta.TransactionManager"              value="java:jboss/TransactionManager" />
     </properties>
  </persistence-unit>
</persistence>

org.hibernate.jpa.HibernatePersistenceProvider
java:/jdbc/activaterds
...

调用合并时会出现什么行为或异常?堆栈跟踪或至少底层异常非常有用。只需检查实体中是否有任何字段标记为Updateable=False。请参阅本文我使用的是容器管理事务(CMT),而不是用户管理事务,因此我无法使用em.getTransaction()更新了帖子,提供了更多信息。调用合并时会出现什么行为或异常?堆栈跟踪或至少底层异常是有帮助的。只需检查实体中是否有任何字段标记为Updateable=False。请参阅本文我使用的是容器管理事务(CMT),而不是用户管理事务,因此我无法使用em.getTransaction()更新的文章,其中包含更多信息。
<beans>
  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="campaigner" />
  </bean>

  <bean id="em" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>
</beans>
<persistence>
  <persistence-unit name="campaigner" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:/jdbc/CampaignerDS</jta-data-source>

    ...

    <properties>
      <property name="hibernate.dialect"                   value="org.hibernate.dialect.MySQLInnoDBDialect" />
      <property name="hibernate.transaction.jta.platform"  value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
      <property name="jta.UserTransaction"                 value="java:jboss/UserTransaction" />
      <property name="jta.TransactionManager"              value="java:jboss/TransactionManager" />
     </properties>
  </persistence-unit>
</persistence>