有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案