从QueryDSL中的自定义表中选择

我在JBoss上使用QueryDSL-JPA,并且希望从某一表中选择一个实体,该实体不同于我通常使用的实体,并通过@Table进行注释。我不想创建一个单独的Java类,因为最后,它应该返回我正在使用的同一类。

关于如何实现这一目标的任何想法?也可以通过EntityManager或QueryDSL-SQL或Hiberate。使用这种方法访问历史表应该很常见...

huang346197 回答:从QueryDSL中的自定义表中选择

我能看到的最好方法是通过JPA中的自定义SQL。 QueryDSL不允许这样做:

   final AbstractEntityPersister persister = getEntityPersister();
   final String[] idColumnNames = persister.getIdentifierColumnNames();
   Validate.isTrue(idColumnNames.length == 1);

   final String sql = "select * from " + getEntityPersister().getTableName() + HIST_TABLE_SUFFIX + " where " + idColumnNames[0] + " = ?";
   @SuppressWarnings("unchecked")
   final List<E> histList = em.createNativeQuery(sql,getEntityClass()).setParameter(1,id).getResultList();

使用

@PersistenceContext(name = "MyDS")
protected EntityManager em;

protected AbstractEntityPersister getEntityPersister() {
    final MetamodelImplementor mm = (MetamodelImplementor) em.getEntityManagerFactory().getMetamodel();
    return (AbstractEntityPersister) mm.entityPersister(getEntityClass());
}
本文链接:https://www.f2er.com/3065622.html

大家都在问