java - 从 QueryDSL 中的自定义表中选择

标签 java hibernate jpa querydsl

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

关于如何实现这一目标有什么想法吗?或者通过 EntityManager 或 QueryDSL-SQL 或 Hiberate。使用这种方法访问历史表应该并不少见......

最佳答案

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

关于java - 从 QueryDSL 中的自定义表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58955190/

相关文章:

java - MeasureSpec.getMode() 如何从整数值中提取众数?

java - 基准测试 Java HashMap Get(JMH 与循环)

java - 改造 "java.net.ProtocolException: Unexpected status line",有人吗?

java - JPA CriteriaQuery 的简单 where 条件

java - JPQL : unknown state or association field (EclipseLink)

database - 使用 postgresql 中已存在的表创建 ER 图或任何 DB 图

java - 拥有一方的真正含义是什么?

hibernate - 使用一个实体(及其主键)作为另一个实体的 Id

java - MySQL连接超时

java - Spring Boot + Hibernate JPA 在 @Service 层中没有具有实际事务的 EntityManager