AFAIK EntityManager The Java interface cannot be implemented directly in Scala. Java varargs are converted to Seq[Class[_]] in the first method and Seq[String] in the second method. Due to erasure, both methods appear as having the same signature createStoredProcedureQuery(String, Seq[_]) .
I can only suggest a workaround for this problem. You must write an abstract Java class that extends the EntityManager interface and implements two violation methods, delegating 2 to other abstract methods with different names in order to disambiguate:
public abstract class EntityManagerWorkaround implements EntityManager { @Override public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class... resultClasses) { return createStoredProcedureQueryForResultClasses(procedureName, resultClasses); } @Override public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String... resultSetMappings) { return createStoredProcedureQueryForResultSetMappings(procedureName, resultSetMappings); } public abstract StoredProcedureQuery createStoredProcedureQueryForResultClasses(String procedureName, Class... resultClasses); public abstract StoredProcedureQuery createStoredProcedureQueryForResultSetMappings(String procedureName, String... resultSetMappings);
}
Now you can extend the abstract class from Scala and implement ambiguous methods:
class EntityManagerImpl extends EntityManagerWorkaround { override def createStoredProcedureQueryForResultClasses(procedureName: String, resultClasses: Class[_]*) = ??? override def createStoredProcedureQueryForResultSetMappings(procedureName: String, resultSetMappings: String*) = ??? }
Jelmo source share