[英]ActiveJDBC and Java Generics causing
我有以下两个类,其中Document扩展了一个提供帮助函数的Abstract类,其中一个是“ find”方法,该方法基于一些简单逻辑构建查询以查找记录。
public abstract class AbstractTable<T extends AbstractTable<T>> extends Model {
...
public T find (String[] columns) {
String whereClause = "";
List<Object> whereClauseData = new ArrayList<Object> ();
for (String column : columns) {
Object data = this.get(column);
if (data == null) {
whereClause += column + " is null AND ";
} else {
whereClause += column + " = ? AND ";
whereClauseData.add (data);
}
}
return findFirst (whereClause.substring(0, whereClause.length () - 5), whereClauseData.toArray());
}
}
public class Document extends AbstractTable<Document> {
...
public Document findExistingObject(Document document) {
String[] columns = new String[] {"court_case_id", "number", "name", "file_date"};
return super.find (columns);
}
}
当我运行此代码,并在Document上调用“ findExistingObject”方法时,我收到此异常:
线程“主”中的异常org.javalite.activejdbc.InitException:无法确定模型类名称,您确定已经对模型进行了检测吗?
我已经完全确定我已经对这些类进行了检测。 当我将代码从AbstractTable移到Document时,一切工作正常。 我希望有人可以提供一些建议或帮助,这些建议或帮助可以告诉我我做错了什么。
提前致谢。
问题的确切原因不是泛型,而是检测。 检测跳过抽象模型,这意味着在类Model
而不是Document
上调用findFirst
方法。 您需要在模型Document
上调用方法findFirst
。 这是适合您的代码版本:
public T find (String[] columns) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
String whereClause = "";
List<Object> whereClauseData = new ArrayList<>();
for (String column : columns) {
Object data = get(column);
if (data == null) {
whereClause += column + " is null AND ";
} else {
whereClause += column + " = ? AND ";
whereClauseData.add (data);
}
}
Method findFirst = getClass().getDeclaredMethod("findFirst", String.class, Object[].class);
return (T) findFirst.invoke(null, whereClause.substring(0, whereClause.length () - 5), whereClauseData.toArray());
}
那里有些丑陋,但至少您可以将其应用于所有模型(如果这是您想要的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.