【问题标题】:Select from custom table in QueryDSL从 QueryDSL 中的自定义表中选择
【发布时间】:2019-11-20 13:12:01
【问题描述】:

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

关于如何实现这一点的任何想法?或者通过 EntityManager 或 QueryDSL-SQL 或 Hiberate。使用这种方法访问历史表应该不会那么罕见......

【问题讨论】:

  • 在 FluentJPA 中,这可以通过推导轻松实现。可能在 QueryDSL 中也可以做到这一点

标签: java hibernate jpa querydsl


【解决方案1】:

我能看到的最好方法是通过 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());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多