【问题标题】:scala compiling error: Cannot resolve overloaded method 'withTransaction'scala编译错误:无法解析重载方法'withTransaction'
【发布时间】:2021-09-08 11:09:01
【问题描述】:

我是 Scala 新手,我不知道如何解决方法 withTransaction 的编译错误:

Cannot resolve overloaded method 'withTransaction'

object Global {
  
   def goBootstrap(app: Application) {
    Logger.info(" ****   start *****")
     onGet();

    }

  def onGet() {
    import play.db.jpa.JPA
    Logger.info("Cnnection start");
    JPA.withTransaction(JPA.em =>
    {
      val resultsList = JPA.em.createNamedQuery("findCity").setParameter("name", "Boston").getResultList
    }
    );
    
  }

}
      

此代码 sn-p 位于 Play 项目(版本 2.3.X)的 Global.scala 文件中。 JPA 来自 import play.db.jpa.JPA

如何解决这个编译错误?

【问题讨论】:

  • 我们需要更多信息,我在playframework repository 中找不到Global.scala。你用的是什么版本? JPA 对象的类型是什么?
  • 当然:玩 2.3.X 版。 JPA 来自 import play.db.jpa.JPA
  • 请使用完整的.scala 文件更新问题。

标签: java scala jpa playframework


【解决方案1】:

错误告诉您 JPA 上没有签名与您传递的参数匹配的方法。你打电话给JPA.withTransaction( () => Unit)

查看sourcewithTransactionUnit 返回类型的三种方法:

void withTransaction(Consumer<EntityManager> block);
void withTransaction(String name, Consumer<EntityManager> block);
void withTransaction(String name, boolean readOnly, Consumer<EntityManager> block);

我将假设您正在尝试使用其中的第一种方法。查看docs for Consumer 它需要一个参数。

简而言之,您需要为您的块提供输入,例如:

   JPA.withTransaction(JPA.em => {
      val resultsList = JPA.em.createNamedQuery("findCity").setParameter("name", name).getResultList
    });

【讨论】:

  • 感谢您回答我。我尝试使用文档建议,并使用第一个方法代码块给出参数,但错误仍然存​​在......
【解决方案2】:

问题是你不能通过scala直接实例化一个JPA连接。也因为play 2.3框架不支持这个功能:https://www.playframework.com/documentation/2.3.x/ScalaHome

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多