0

我正在尝试创建一个标准来从 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();

}

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

4

1 回答 1

0

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

    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
于 2019-04-09T20:21:29.650 回答