【问题标题】:How to implement org.hibernate.Session in Scala如何在 Scala 中实现 org.hibernate.Session
【发布时间】:2014-03-06 17:42:49
【问题描述】:

“Session”接口有两种方法,在 Scala 中,由于类型擦除,它们被简化为具有相同的签名:

public ProcedureCall createStoredProcedureCall(String procedureName, Class... resultClasses)

public ProcedureCall createStoredProcedureCall(String procedureName, String... resultSetMappings)

尝试实现它们会报错:

错误:双重定义: 方法 createStoredProcedureCall:(procedureName: String, resultSetMappings: String*)org.hibernate.procedure.ProcedureCall 和 方法 createStoredProcedureCall:(procedureName: String, resultClasses: Class[_])org.hibernate.procedure.ProcedureCall 在第 199 行 擦除后具有相同的类型: (procedureName: String, resultSetMappings: Seq)org.hibernate.procedure.ProcedureCall 覆盖 def createStoredProcedureCall(procedureName: String, resultSetMappings: String): ProcedureCall = null ^

那么我将如何以一种既能编译又能工作的方式来实现这个接口呢?

【问题讨论】:

  • 放弃休眠并使用 SLICK? :)
  • @barnesjd 也许在未来的版本中。在不改变生产系统的技术堆栈的情况下,我还有很多事情要做。
  • 另外,Slick 在项目启动时还没有进入生产版本,因此无法考虑。
  • 哦,我明白了。如果它是一个生产系统,那绝对是一个不同的故事。 :) 很抱歉你必须经历这个,LOL
  • 据我所知,目前您无法在 Scala 中实现这两种方法。这是与 Java 的互操作性问题。考虑在 Java 中实现接口并在 Scala 中使用它

标签: hibernate scala


【解决方案1】:

正如serejja 指出的那样,您可以用Java 编写一个shim 来为您进行翻译:

Java:

package jibernate;

import org.hibernate.procedure.ProcedureCall;
import org.hibernate.SharedSessionContract;

public abstract class Yava implements SharedSessionContract {

  public ProcedureCall createStoredProcedureCallC(String n, Class... xs) {
    return createStoredProcedureCall(n, xs);
  }

  public ProcedureCall createStoredProcedureCallS(String n, String... xs) {
    return createStoredProcedureCall(n, xs);
  }

}

如果你使用的是 sbt,它可以存在于 src/main/java/jibernate/Yava.java

斯卡拉:

package whybernate

trait Mehssion extends jibernate.Yava {

  import org.hibernate.procedure.ProcedureCall

  def createStoredProcedureCall(n: String, h: Class[_], t: Class[_]*) =
    createStoredProcedureCallC(n, (h +: t):_*)

  def createStoredProcedureCall(n: String, h: String, t: String*) =
    createStoredProcedureCallS(n, (h +: t):_*)

}

您可以以相同的方式调用这些函数,利用保证您至少拥有一个所需的可变参数这一事实。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2016-12-10
    • 2011-02-01
    • 2011-09-26
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多