解决JPQL查询

问题描述

我正在尝试使用JPQL从数据库获取属性详细信息的详细信息,听说我正在写类似(properties.IsDeleted 'Y'或properties.IsDeleted IS NULL)的条件。 但是,在JPQL查询中,它没有得到“ Y ”,而是显示为“ ”符号。这就是我要解决的问题。请帮我解决这个问题。

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

选择属性0_.property_id作为col_0_0_, properties0_.property_type为col_1_0_,properties0_.property_name为 col_2_0_,属性0_.property_area为col_3_0_, properties0_.property_city作为col_4_0_,properties0_.no_of_rooms作为 col_5_0_来自iot_property properties0_,其中 ( properties0_.is_deleted ?或properties0_.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);
                }

解决方法

没有诸如“最终的JPQL最终通过插入的参数转换为最终的SQL”之类的东西。 JPA实现如何生成SQL取决于它,通常,参数绝不会被替换为任何String。 SQL是根据表达式树等而非字符串生成的。这是一个标准查询,因此对于参数,它将在控制台上显示“?”

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