Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
ActiveJDBC和Java泛型_Java_Orm_Activejdbc - Fatal编程技术网

ActiveJDBC和Java泛型

ActiveJDBC和Java泛型,java,orm,activejdbc,Java,Orm,Activejdbc,我有以下两个类,其中文档扩展了一个提供帮助函数的抽象类,其中一个是“find”方法,该方法基于一些简单的逻辑构建查询以查找记录 public abstract class AbstractTable<T extends AbstractTable<T>> extends Model { ... public T find (String[] columns) { String whereClause = ""; List<

我有以下两个类,其中文档扩展了一个提供帮助函数的抽象类,其中一个是“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);
    }
}
公共抽象类AbstractTable扩展模型{
...
无法找到公共字符串(字符串[]列){
字符串whereClause=“”;
ClauseData=newArrayList()的列表;
for(字符串列:列){
对象数据=this.get(列);
如果(数据==null){
其中,子句+=列+“为空且”;
}否则{
其中,子句+=列+“=?和”;
其中,第15.1条添加(数据);
}
}
返回findFirst(whereClause.substring(0,whereClause.length()-5),whereClauseData.toArray());
}
}
公共类文档扩展了抽象表{
...
公共文档findExistingObject(文档文档){
String[]columns=新字符串[]{“court\u case\u id”、“number”、“name”、“file\u date”};
返回super.find(列);
}
}
当我运行此代码,并对文档调用“findExistingObject”方法时,我收到以下异常:

线程“main”org.javalite.activejdbc.InitException中的异常: 无法确定模型类名,是否确实已删除模型 仪器化

我已经完全确定我已经安装了这些类。当我将代码从AbstractTable移动到文档中时,一切工作都很完美。我希望有人能给我一些建议或帮助,让我知道我做错了什么


提前感谢。

问题的确切原因不是泛型,而是检测。插装跳过抽象模型,这意味着方法
findFirst
在类
Model
上调用,而不是在
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());
}
public T find(String[]列)抛出NoSuchMethodException、InvocationTargetException、IllegalAccessException{
字符串whereClause=“”;
ClauseData=new ArrayList()的列表;
for(字符串列:列){
对象数据=获取(列);
如果(数据==null){
其中,子句+=列+“为空且”;
}否则{
其中,子句+=列+“=?和”;
其中,第15.1条添加(数据);
}
}
方法findFirst=getClass().getDeclaredMethod(“findFirst”,String.class,Object[].class);
返回(T)findFirst.invoke(null,whereClause.substring(0,whereClause.length()-5),whereClauseData.toArray());
}
这有点丑陋,但至少你可以在你所有的模型中应用这一点(如果这是你想要的)