我正在使用Hibernate 4.2.21.Final。我的实体使用TABLE标识符生成器
@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.x上,我们使用org.springframework.transaction.jta.WebSphereUowTransactionManager进行CMT。
问题是,当调用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)
有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
使用org.hibernate.service.jta.platform.internal.WebSphereJtaPlatform而不是org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform之后能够解决这个问题,即使后者应该用于WAS&gt ; 6
<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WebSphereJtaPlatform</prop>