我正在尝试创建一个标准来从2个表(UserDetail,Vehicle)中检索行。 UserDetail引用了Vehicle。我的目标是在给定UserDetail id的情况下从两个Tables中检索指定字段的列表。在@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();
}
谁能帮我?我使用带有谓词的规范获取数据,因为需要查询
Criteria查询(我没有测试/调试它,可能需要修改):
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();
BTW。 JPQL查询错误。不需要条件,它将由JPA自动创建。
SELECT ud.userId, ud.userName ,vh.vehicleId, vh.vehicleName
FROM UserDetail ud
LEFT JOIN ud.vehicle