java在JPA标准生成器中将不相关的实体左键联接到根表
我有两张桌子TABLE_A
&TABLE_B
。我为这两个名为TableA
的表提供了两个实体类&TableB
TableA有一个属性,它实际上是一个外键,是TableB的ID。但这种关系在表级和实体类级都不存在
这意味着这两个表与EntityManager无关
现在我想生成一个jpa查询,如下所示
select
tablea.name, tableb.name
from TableA tablea left join TableB tableb on
tablea.tablebId=tableb.pkId
基本上,表A是我的主表
这是我做的,这是交叉连接
String rootClassNameWithPackage = "TableA";
String fkClassNameWithPackage = "TableB";
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<?> criteriaQuery = null;
Root<?> rootTable = null;
Root<?> fkTable = null;
try {
criteriaQuery = criteriaBuilder.createQuery(String.class);
rootTable = criteriaQuery != null ? criteriaQuery.from(Class.forName(rootClassNameWithPackage)) : null;
fkTable = criteriaQuery != null ? criteriaQuery.from(Class.forName(fkClassNameWithPackage)) : null;
List<Predicate> criteriaList = new ArrayList<>();
Predicate predicateSearchFk = criteriaBuilder.equal(rootTable.get("tablebId"), fkTable.get("pkid"));
criteriaList.add(predicateSearchFk);
criteriaQuery.where(criteriaBuilder.and(criteriaList.toArray(new Predicate[0])));
} catch (ClassNotFoundException e) {
logger.error(e.getMessage());
}
final TypedQuery<?> query = entityManager.createQuery(criteriaQuery);
query.setMaxResults(pageSize);
return query.getResultList();
如前所述,这是交叉连接。我们想加入。不幸的是,我们无法更改实体类以添加FK关系
共 (0) 个答案