Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
如何在Scala中实现org.hibernate.Session_Hibernate_Scala - Fatal编程技术网

如何在Scala中实现org.hibernate.Session

如何在Scala中实现org.hibernate.Session,hibernate,scala,Hibernate,Scala,“会话”接口有两种方法,在Scala中,由于类型擦除,它们被简化为具有相同的签名: public ProcedureCall createStoredProcedureCall(String procedureName, Class... resultClasses) public ProcedureCall createStoredProcedureCall(String procedureName, String... resultSetMappings) 尝试实现它们会出现以下错误:

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

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

public ProcedureCall createStoredProcedureCall(String procedureName, String... resultSetMappings)
尝试实现它们会出现以下错误:

错误:双重定义: 方法createStoredProcedureCall:(procedureName:String,resultsMappings:String*)org.hibernate.procedure.ProcedureCall和 方法createStoredProcedureCall:(procedureName:String,resultClasses:Class[_])org.hibernate.procedure.ProcedureCall,第199行 擦除后具有相同的类型:(procedureName:String,resultsMappings:Seq)org.hibernate.procedure.ProcedureCall 重写def createStoredProcedureCall(过程重命名:字符串,结果映射:字符串):过程调用=null ^

那么,我如何以编译和工作的方式实现这个接口呢?

正如前面所指出的,您可以用Java编写一个垫片来为您进行翻译:

爪哇:

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

斯卡拉:


您可以用同样的方式调用这些函数,利用这样一个事实,即您保证至少有一个所需的vararg。

放弃Hibernate并使用SLICK?:)@barnesjd可能会在未来发布。在不改变生产系统的技术堆栈的情况下,我有很多事情要做。另外,当项目开始时,Slick不在生产版本中,所以它不可能被考虑。哦,我明白了。如果它是一个生产系统,则肯定是另一个故事。:)很抱歉,你必须经历这些,LOLAs,我知道现在没有办法在Scala中实现这两种方法。这是Java的互操作性问题。考虑在java中实现接口并使用Scala
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);
  }

}
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):_*)

}