首页 > 解决方案 > 解决 JPQL 查询

问题描述

我正在尝试使用 JPQL 从数据库中获取 Properties 详细信息的详细信息,听说我正在写 where 条件,例如 (properties.IsDeleted <> 'Y' or properties.IsDeleted IS NULL) 但是,在 JPQL 查询中它没有得到' Y ',但是,它显示像' ' 象征。这是我遇到的问题。请帮助我解决这个问题。

下面的代码显示如下查询: -

选择 properties0_.property_id 作为 col_0_0_,property0_.property_type 作为 col_1_0_,properties0_.property_name 作为 col_2_0_,properties0_.property_area 作为 col_3_0_,property0_.property_city 作为 col_4_0_,properties0_.no_of_rooms 作为 col_5_0_ from iot_property properties0_properties0_.is_deleted is_deleted 为空)和 properties0_.property_id=6

在上面的查询中以粗体标记显示properties0_.is_deleted<>? ,但我想要的是properties0_.is_deleted<>Y

为什么那个“Y”没有分配给那个查询。我不明白。请你帮我解决这个问题。谢谢

 CriteriaBuilder deviceBuilder = propertySession.getCriteriaBuilder();
                    CriteriaQuery<Object[]> userCriteriaQuery = deviceBuilder.createQuery(Object[].class);
                    Root<Properties> propertyRoot = userCriteriaQuery.from(Properties.class);
                    Path<Object> pathPropertyId = propertyRoot.get("propertyId");
                    Path<Object> pathpropertyType = propertyRoot.get("propertyType");
                    Path<Object> pathpropertyName = propertyRoot.get("propertyName");
                    Path<Object> pathpropertyArea = propertyRoot.get("propertyArea");
                    Path<Object> pathpropertyCity = propertyRoot.get("propertyCity");
                    Path<Object> pathnumberOfRooms = propertyRoot.get("numberOfRooms");
                    userCriteriaQuery.multiselect(pathPropertyId, pathpropertyType, pathpropertyName, pathpropertyArea,
                            pathpropertyCity, pathnumberOfRooms);

Predicate userRestriction = deviceBuilder.or(deviceBuilder.notEqual(propertyRoot.get("isDelete"), "Y"),
                        deviceBuilder.isNull(propertyRoot.get("isDelete")));
                Predicate userRestriction2 = deviceBuilder
                        .and(deviceBuilder.equal(propertyRoot.get("propertyId"), propertyId));
                userCriteriaQuery.where(deviceBuilder.and(userRestriction, userRestriction2));
                
                Query<Object[]> deviceQuery = propertySession.createQuery(userCriteriaQuery);
                List<Object[]> resultList =deviceQuery.getResultList();
                for(Object[] objects : resultList) {
                    Integer dbPropertyId = (Integer) objects[0];
                    String dbPropertyType = (String) objects[1];
                    String  dbpropertyName = (String) objects[2];
                    String dbpropertyArea = (String) objects[3];
                    String dbpropertyCity = (String) objects[4];
                    Integer dbNoOfRooms = (Integer) objects[5];
                    System.out.println(dbPropertyId);
                    System.out.println(dbPropertyType);
                    System.out.println(dbpropertyName);
                    System.out.println(dbpropertyArea);
                    System.out.println(dbpropertyCity);
                    System.out.println(dbNoOfRooms);
                }

标签: javahibernatejpql

解决方案


没有“最终的 JPQL 最终被翻译成带有插入参数的最终 SQL”之类的东西。JPA 实现如何生成 SQL 取决于它,并且参数通常永远不会被替换为任何字符串。SQL 是从表达式树等生成的,而不是 String。这是一个条件查询,因此对于参数它将显示“?” 在控制台上。

如果您想插入参数值,请自己做,因为它只对您有意义


推荐阅读