【问题标题】:Join 2 Tables using Spring Boot JPA Criteria Specification and Predicate使用 Spring Boot JPA 标准规范和谓词连接 2 个表
【发布时间】:2019-08-26 22:41:59
【问题描述】:

我正在尝试创建一个标准来从 2 个表(UserDetail、Vehicle)中检索行。 UserDetail 具有对 Vehicle 的引用。我的目标是在给定 UserDetail id 的情况下从两个表中检索指定字段的列表。在@Query 中很容易做到,但客户说这必须使用带有规范和谓词的条件进行编码以加入表。

我的@Query 是:

@Repository
public interface UserDao extends CrudRepository<UserDetail, Integer>{

    @Query("SELECT ud.userId, ud.userName ,vh.vehicleId, vh.vehicleName "
            + "FROM UserDetail ud LEFT JOIN ud.vehicle vh where ud.vehicleId = vh.vehicleId")
    public List<UserVehicleDTO> findAllUserVehicle();

}

谁能帮助我?我使用带有谓词的规范获取数据,因为需要给定查询

【问题讨论】:

    标签: spring-boot jpa criteria predicate specification-pattern


    【解决方案1】:

    条件查询(我没有测试/调试过,可能需要修改):

        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Tuple> query = cb.createTupleQuery();
        Root<UserDetail> root = query.from(UserDetail.class);
    
        Join<UserDetail, Vehicle> join = root.join("vehicle", JoinType.LEFT);
        query.multiselect(     
                        root.get("userId"),
                        root.get("userName"),
                        join.get("vehicleId"),
                        join.get("vehicleName")
                )) 
        List<Tuple> x = entityManager.createQuery(query).getResultList();
    

    顺便说一句。 JPQL 查询错误。不需要where条件,JPA会自动创建。

    SELECT ud.userId, ud.userName ,vh.vehicleId, vh.vehicleName 
    FROM UserDetail ud 
    LEFT JOIN ud.vehicle
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多