gpt4 book ai didi

java - genericdaohibernate 添加除 id 之外的 getbyfield

转载 作者:行者123 更新时间:2023-12-01 14:19:59 27 4
gpt4 key购买 nike

我正在使用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 之外的其他字段来获取对象列表(我在许多模型类中有一些常见字段)。我需要在所有服务和DAO中编写类似的方法。所以我在想是否可以在通用 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)仅是对象,而不是列表

那么我怎样才能创建这样的方法呢?如果是这样,我想我也可以为 remove() 创建方法(但这对我来说现在不是必需的,将来可能是)。

最佳答案

Javadoc for IdentifierLoadAccess load 方法的行为方式非常清楚:

Return the persistent instance with the given identifier, or null if there is no such persistent instance.

这意味着它应该只返回一个对象,而不是对象的List。尝试将其转换为 T

如果您想要查询实体(即通过主键以外的任何其他方式检索项目),您很可能需要实现 search(String)方法。

如果您想要查询实体(即通过主键以外的任何其他方式检索项目),请查看 AppFuse 附带的 UserDaoHibernate。它包含一个方法loadUserByUsername(),其实现如下:

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
List users = getSession().createCriteria(User.class).add(Restrictions.eq("username", username)).list();
if (users == null || users.isEmpty()) {
throw new UsernameNotFoundException("user '" + username + "' not found...");
} else {
return (UserDetails) users.get(0);
}
}

显然,如果你想返回所有项,则应该稍微修改一下(这个是编造的):

public List<UserDetails> loadLockedUsers() {
List<UserDetails> users = (List<UserDetails>) getSession().createCriteria(User.class).add(Restrictions.eq("account_locked", true)).list();
return users;
}

关于java - genericdaohibernate 添加除 id 之外的 getbyfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17693326/

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