繁体   English   中英

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

[英]Can i reference a non mapped table in JPA CriteriaBuilder?

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

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());

试试看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM