gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:07:06 25 4
gpt4 key购买 nike

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

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

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

尝试实现它们会出现错误:

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

那么我该如何以既能编译又能工作的方式实现这个接口(interface)呢?

最佳答案

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

Scala:

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

}

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

关于hibernate - 如何在 Scala 中实现 org.hibernate.Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com