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