我正在使用org.appfuse.dao.hibernate
包,并且我已经使用了GenericDaoHibernate<T,PK>
类中的所有方法。
我找到了这些方法
public List<T> getAll();
public List<T> getAllDistinct();
public List<T> search(String searchTerm);
public T get(PK id);
public boolean exists(PK id);
public T save(T object);
public void remove(T object);
public void remove(PK id);
public List<T> findByNamedQuery(String queryName, Map<String, Object> queryParams);
public void reindex();
public void reindexAll(boolean async);
我有一些模型类、服务和方法。
现在我想使用模型类中除 id 之外的其他字段来获取对象列表(我在许多模型类中有一些公共字段)。我需要在所有服务和 daos 中编写类似的方法。所以我在想是否有可能在通用 dao 中创建一个通用方法。
以下我尝试了,但没有奏效。
public T getbyClientKey(Long clientkey) {
Session sess = getSession();
IdentifierLoadAccess byId = sess.byId(persistentClass);
List<T> entity = (List<T>) byId.load(clientkey);
if (entity == null) {
log.warn("Uh oh, '" + this.persistentClass + "' object with client '" + clientkey + "' not found...");
throw new ObjectRetrievalFailureException(this.persistentClass, clientkey);
}
return entity;
}
我知道这将是错误的。它显示了TypeCastingException,因为返回类型byId.load(id)
仅为对象,而不是List。
那么我怎样才能创建这样的方法呢?如果是这样,我想我也可以为remove()创建方法(但这对我来说现在不是必需的,可能在将来)。