有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate表格生成器。getNextValue对当前事务调用suspend

我正在使用Hibernate 4.2.21。最终的我的实体使用表标识符生成器

@Id
@GeneratedValue(generator = "SEQUENCEGENERATOR",strategy=GenerationType.TABLE)
@TableGenerator(name="SEQUENCEGENERATOR", table = "SEQUENCE_GENERATOR",pkColumnName="PK_ID", valueColumnName = "PK_ID_VALUE",
        pkColumnValue = "SOME_ID", allocationSize=1)
@Column(name = "SOME_ID", nullable = false, unique = true)
private Long id;

该应用程序部署在WAS 8.5.5上。我们使用组织。springframework。交易jta。CMT的WebSphereUowTransactionManager

问题是,当调用TableGenerator#generate方法时,它会将任务委托给JtaIsolationDelegate,后者会根据下面的代码尝试暂停当前事务

public <T> T delegateWork(WorkExecutorVisitable<T> work, boolean transacted) throws HibernateException {
    TransactionManager transactionManager = transactionManager();

    try {
        // First we suspend any current JTA transaction
        Transaction surroundingTransaction = transactionManager.suspend();
        LOG.debugf( "Surrounding JTA transaction suspended [%s]", surroundingTransaction );

        boolean hadProblems = false;
        try {
            // then perform the requested work
            if ( transacted ) {
                return doTheWorkInNewTransaction( work, transactionManager );
            }
            else {
                return doTheWorkInNoTransaction( work );
            }
        }

这会导致异常UnsupportedOperationException

java.lang.UnsupportedOperationException
at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter.suspend(WebSphereExtendedJtaPlatform.java:149)
at org.hibernate.engine.transaction.internal.jta.JtaIsolationDelegate.delegateWork(JtaIsolationDelegate.java:83)
at org.hibernate.id.enhanced.TableGenerator$1.getNextValue(TableGenerator.java:476)
at org.hibernate.id.enhanced.OptimizerFactory$NoopOptimizer.generate(OptimizerFactory.java:258)
at org.hibernate.id.enhanced.TableGenerator.generate(TableGenerator.java:472)

有什么解决这个问题的建议吗


共 (1) 个答案

  1. # 1 楼答案

    在使用org后能够解决这个问题。冬眠服务jta。站台内部的WebSphere是一个平台,而不是一个组织。冬眠服务jta。站台内部的WebSphereExtendedjTapForm,即使后者应该用于WAS>;六,

    <prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WebSphereJtaPlatform</prop>
    

    从这里得到帮助https://stackoverflow.com/a/22212658/5432388