Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DB2 Java Spring@Transactional with Propagation.REQUIRES_NEW不读取隔离。读取未提交_Java_Spring_Hibernate_Db2 - Fatal编程技术网

DB2 Java Spring@Transactional with Propagation.REQUIRES_NEW不读取隔离。读取未提交

DB2 Java Spring@Transactional with Propagation.REQUIRES_NEW不读取隔离。读取未提交,java,spring,hibernate,db2,Java,Spring,Hibernate,Db2,我有个奇怪的问题,我想不出来。 DB2数据库 Java Spring 4 冬眠4 我有一个事务类: public class B2BTrackingMsgProcessorImpl … { private GenericProcessor trackProcessor; @Transactional public void process(Message msg){ …. trackProcessor.process(msg); } } public class

我有个奇怪的问题,我想不出来。 DB2数据库 Java Spring 4 冬眠4

我有一个事务类:

public class B2BTrackingMsgProcessorImpl … {
  private GenericProcessor trackProcessor;

  @Transactional
  public void process(Message msg){ ….
      trackProcessor.process(msg);
   }
}

public class TrackingMsgProcessor …{
private ILookupUUIDXRef uuidXRefLookup;

   public void process(msg) {…
      uuidXRefLookup.getPayloadIdByUuid(uuid…);
   }

}


public interface ILookupUUIDXRef {
    PayloadIdXRef getPayloadIdByUuid(String uuid);
}

public class LookupUuidXrefImpl implements ILookupUUIDXRef {

    @Override
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
public PayloadIdXRef getPayloadIdByUuid(String uuid) {
}
所以类“LookupUuidXrefImpl”创建了一个新事务,我想读取未提交的事务

Spring上下文:

<bean id="b2bTrackingMsgProcessor" class="B2BTrackingMsgProcessorImpl">
<property name="trackProcessor" ref="trackProcessor"/>
</bean>

<bean id="trackProcessor" class="TrackingMsgProcessor">
<property name="uuidXRefLookup" ref="uuidLookup"/>
</bean>

<bean id="uuidLookup" class="LookupUuidXrefImpl">
</bean>

日志显示不同的事务:

调试Tra ckckingmsgprocessor-TransactionStatus=org.springframework.transaction.support。DefaultTransactionStatus@fc028b62

调试LookupUuidXrefImpl-TransactionStatus=org.springframework.transaction.support。DefaultTransactionStatus@a8aa0f45

但是,select查询没有“with UR”,而且只要DBA选中,它总是CS隔离(默认)

如何使新事务读取为未提交的“UR” ?

我看到的SQL没有“with ur”:

从有效负载\u ID\u外部参照payloadidx0\u中选择a、b、c,其中payloadidx0\uId0.PAYLD\u UUID=?

即使spring日志显示新事务,UR:


WebSphereUowTransactionManager-创建名为[null]的新事务:传播\u需要\u新建、隔离\u读取\u未提交

您看不到使用UR的
,因为事务管理器不在语句级别处理事务隔离(事实上,大多数RDBMS甚至不提供这样的功能)。相反,每个正在进行的事务都需要一个单独的连接,并且在连接级别上设置隔离。为什么您需要使用UR的
?我只把这看作是最后的手段,当表现不好的时候。不过,它也有缺点。@crizzis-这是一件令人头疼的事。。。我将无法与您建立另一个连接。。。。不幸的是,我将研究如何创建一个本机查询,在其中指定UR,看看这是否有效@Impaler-I有6个并发线程分布在多个JVM上,所有线程都试图创建UUID记录,这会造成冲突。我希望能够将碰撞的次数减少到最小,因此UR。创建UUID的第一个线程将成功,所有后续线程将只使用已经存在的UUID,如果事务失败,则重试。