Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java 我怎样才能得到一个;“交易开始”;Spring中的时间戳+;JPA&x2B;休眠设置?_Java_Hibernate_Spring_Jpa_Transactions - Fatal编程技术网

Java 我怎样才能得到一个;“交易开始”;Spring中的时间戳+;JPA&x2B;休眠设置?

Java 我怎样才能得到一个;“交易开始”;Spring中的时间戳+;JPA&x2B;休眠设置?,java,hibernate,spring,jpa,transactions,Java,Hibernate,Spring,Jpa,Transactions,我正在使用Spring3.0.5、JPA、Hibernate3.5.5-Final和Spring的JpaTransactionManager。有没有人知道一种简单的方法,可以通过编程为每个事务的开始获取时间戳?Idea 自扩展 每个事务都以方法调用开始,您可以围绕该方法编写一个 面貌 可以在WEB-INF中使用一个过滤器来实现这一点——它会将时间戳作为命名属性注入到请求上下文中。时间戳不是“事务”时间戳,而是请求时间戳。但我想它会满足你的需要。谢谢。我想我可以使用TransactionSynch

我正在使用Spring3.0.5、JPA、Hibernate3.5.5-Final和Spring的JpaTransactionManager。有没有人知道一种简单的方法,可以通过编程为每个事务的开始获取时间戳?

Idea 自扩展 每个事务都以方法调用开始,您可以围绕该方法编写一个

面貌
可以在WEB-INF中使用一个过滤器来实现这一点——它会将时间戳作为命名属性注入到请求上下文中。时间戳不是“事务”时间戳,而是请求时间戳。但我想它会满足你的需要。

谢谢。我想我可以使用TransactionSynchronizationManager.bindResource将时间戳与tx关联起来。你确定吗?使用TransactionSynchronizationManager.bindResource(对象,对象)可以将资源绑定到一个线程,而不是一个事务,因此如果在同一个线程中使用多个事务,则总是会覆盖时间戳…我在方面方面遇到了一些麻烦,所以我只是扩展了JpaTransactionManager(据我所知不是很干净)并使用doBegin和doCleanupAfterCompletion设置/清除时间戳。我没有在一个线程上激活多个tx,所以现在还可以。因为所有tx管理器都应该实现PlatformTransactionManager接口(),也许最好在它的getTransaction方法()周围创建一个方面。因此pointcout应该如下所示:@Pointcut(“执行”)(*org.springframework.transaction.PlatformTransactionManager.getTransaction(..))
@Aspect
public class AspectAroundTransactions() {
   @Pointcut("execution(* org.springframework.*.AbstractPlatformTransactionManager.getTransaction(..))" )
   public void newTransaction() {}

   @Before("newTransaction() && args(transactionDefinition,..)")
   public void beforeStartOfTransaction(TransactionDefinition transactionDefinition) {
      // here goes you code
      long start = System.nanoTime();
      System.out.println("Transaction " + transactionDefinition.getName() + " started at " + start );
   }
}