Java 播放2.5-@事务性只读被忽略?

Java 播放2.5-@事务性只读被忽略?,java,hibernate,playframework,Java,Hibernate,Playframework,我有一个Java Play 2.5应用程序,我有一个标记为只读的事务(在控制器级别): (这是play.db.jpa.Transactional注释) 因此,如果我打开hibernate事务的日志记录: <logger name="org.hibernate.engine.transaction" level="TRACE"/> 然而,我有一个问题-它不是只读的!我添加了一些修改对象的代码(obj.setField(“changed value”)),并在事务结束时将其保存到数据

我有一个Java Play 2.5应用程序,我有一个标记为只读的事务(在控制器级别):

(这是play.db.jpa.Transactional注释)

因此,如果我打开hibernate事务的日志记录:

 <logger name="org.hibernate.engine.transaction" level="TRACE"/>
然而,我有一个问题-它不是只读的!我添加了一些修改对象的代码(obj.setField(“changed value”)),并在事务结束时将其保存到数据库中

我期待一个异常,告诉我事务是只读的,无法提交

  • 为什么事务不是只读的
  • 我是否可以在日志中看到Hibernate是否创建了只读事务

  • 其他信息:Java Play 2.5.10、Hibernate 5(5.2.6)和PostgreSQL作为DB。

    因此,这似乎是因为控制器类本身用@Transactional注释,方法用@Transactional(readOnly=true)注释

    不知何故,类注释覆盖了方法注释。在我看来,这似乎不符合逻辑,但在实践中,情况似乎是这样的:一旦我从类级别删除了@Transactional,它就工作得很好

     <logger name="org.hibernate.engine.transaction" level="TRACE"/>
    
    019-12-03 23:42:23,754 [debug] from org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator in main - No JtaPlatform was specified, checking resolver
    2019-12-03 23:42:23,755 [debug] from org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformResolverInitiator in main - No JtaPlatformResolver was specified, using default [org.hibernate.engine.transaction.jta.platform.internal.StandardJtaPlatformResolver]
    2019-12-03 23:42:23,766 [debug] from org.hibernate.engine.transaction.jta.platform.internal.StandardJtaPlatformResolver in main - Could not resolve JtaPlatform, using default [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
    2019-12-03 23:58:46,769 [debug] from org.hibernate.engine.transaction.internal.TransactionImpl in application-akka.actor.default-dispatcher-5 - begin
    2019-12-03 23:58:46,878 [error] from application in application-akka.actor.default-dispatcher-5 - Transaction: org.hibernate.engine.transaction.internal.TransactionImpl@3d505ddd[transactionCoordinator=org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl@89a1241,exceptionConverter=org.hibernate.internal.ExceptionConverterImpl@76f0443c,transactionDriverControl=org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl@49f1518a]
    2019-12-03 23:59:27,638 [debug] from org.hibernate.engine.transaction.internal.TransactionImpl in application-akka.actor.default-dispatcher-5 - committing