Java 解决JPQL查询

Java 解决JPQL查询,java,hibernate,jpql,Java,Hibernate,Jpql,我正在尝试使用JPQL从数据库中获取属性详细信息,听说我正在编写条件(Properties.IsDeleted'Y'或Properties.IsDeleted为NULL) 但是,在JPQL查询中,它没有得到“Y”,而是显示了类似“?”的符号。这就是我遇到的问题。请帮我解决这个问题 下面的代码显示了如下查询:- 选择属性0。属性id作为列0, 属性0。属性类型为列1。属性0。属性名称为 第2列第0列,属性第0列。属性区域为第3列第0列, 房地产0。房地产城市为第4列,房地产0。无房地产为第4列 物

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

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

选择属性0。属性id作为列0, 属性0。属性类型为列1。属性0。属性名称为 第2列第0列,属性第0列。属性区域为第3列第0列, 房地产0。房地产城市为第4列,房地产0。无房地产为第4列 物联网财产0的列5,其中 (属性0是否已删除?或属性0是否已删除为空)以及 属性0。属性id=6

在上面的查询中,粗体标记显示属性0。是否删除?,但我想要的是属性0。是否删除

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

CriteriaBuilder deviceBuilder=propertySession.getCriteriaBuilder();
CriteriaQuery userCriteriaQuery=deviceBuilder.createQuery(对象[].class);
Root propertyRoot=userCriteriaQuery.from(Properties.class);
路径路径propertyId=propertyRoot.get(“propertyId”);
Path pathpropertyType=propertyRoot.get(“propertyType”);
路径路径propertyName=propertyRoot.get(“propertyName”);
路径路径propertyArea=propertyRoot.get(“propertyArea”);
路径路径propertyCity=propertyRoot.get(“propertyCity”);
Path pathnumberOfRooms=propertyRoot.get(“numberOfRooms”);
multiselect(pathPropertyId、pathpropertyType、pathpropertyName、pathpropertyArea、,
pathpropertyCity、pathnumberOfRooms);
谓词userRestriction=deviceBuilder.or(deviceBuilder.notEqual(propertyRoot.get(“isDelete”),“Y”),
deviceBuilder.isNull(propertyRoot.get(“isDelete”));
谓词userRestriction2=deviceBuilder
和(deviceBuilder.equal(propertyRoot.get(“propertyId”),propertyId));
其中(deviceBuilder.and(userRestriction,userRestriction2));
Query deviceQuery=propertySession.createQuery(userCriteriaQuery);
List resultList=deviceQuery.getResultList();
对于(对象[]对象:结果列表){
整数dbPropertyId=(整数)对象[0];
String dbPropertyType=(String)对象[1];
字符串dbpropertyName=(字符串)对象[2];
字符串dbpropertyArea=(字符串)对象[3];
String dbpropertyCity=(String)对象[4];
整数dbnoofroms=(整数)对象[5];
System.out.println(dbPropertyId);
System.out.println(dbPropertyType);
System.out.println(dbpropertyName);
System.out.println(dbpropertyArea);
System.out.println(dbpropertyCity);
System.out.println(dbnoofroms);
}
没有“最终通过插入参数转换为最终SQL的最终JPQL”这样的东西JPA实现如何生成SQL取决于它,通常,参数永远不会被替换为任何字符串。SQL是从表达式树等生成的,不是字符串。这是一个条件查询,因此对于参数,它将在控制台上显示“?”

如果您希望插入param值,那么请自己执行,因为它只对您有意义

 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);
                }