gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:15:35 25 4
gpt4 key购买 nike

我在 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/

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