gpt4 book ai didi

java - 我可以在 JPA CriteriaBuilder 中引用非映射表吗?

转载 作者:行者123 更新时间:2023-12-01 09:00:18 25 4
gpt4 key购买 nike

我正在尝试使用实体管理器重写以下查询..

public abstract class HibernateEntitySelector<T> extends HibernateDAOSupport implements EntitySelector<T> {
@Autowired
public void init(SessionFactory factory) {
setSessionFactory(factory);
}
public String SELECT_IDS = " IN (SELECT RESULT_ID FROM QUERY_RESULTS)";

public List<T> getEntitiesByIds(){
DetachedCriteria criteria = DetachedCriteria.forClass(getEntityClass());
criteria.add(Restrictions.sqlRestriction(getPrimaryKeyField()+SELECT_IDS));
return (List<T>) this.getHibernateTemplate().findByCriteria(criteria);
}

类似这样的事情..

public abstract class HibernateEntitySelector<T> implements EntitySelector<T> {

public String SELECT_IDS = " IN (SELECT RESULT_ID FROM QUERY_RESULTS)";

@PersistenceContext
protected EntityManager em;

public List<T> getEntitiesByIds(){
String s = "FROM " + getEntityClass().getSimpleName() + " ent WHERE ent."+getEntityId()+SELECT_IDS;
Query query = this.em.createNamedQuery(s);
return (List<T>)query.getResultList();
}
}

但是由于 QUERY_RESULTS 未映射,因此失败。有没有一种方法可以在不使用 createNativeQuery 方法然后手动映射所有列的情况下执行此操作?

最佳答案

虽然你正在使用:

,但你已经非常接近了
Query query = this.em.createNamedQuery(s);

改用 createNativeQuery 并同时更改查询字符串:

String s = "SELECT ent.* FROM " + getEntityClass().getSimpleName() + " ent WHERE ent."+getEntityId() + SELECT_IDS;
Query query = this.em.createNativeQuery(s, getEntityClass());

尝试一下。

关于java - 我可以在 JPA CriteriaBuilder 中引用非映射表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730034/

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