Java 解决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列 物联网财产0的列5,其中 (属性0是否已删除?或属性0是否已删除为空)以及 属性0。属性id=6 在上面的查询中,粗体标记显示属性0。是否删除?,但我想要的是属性0。是否删除 为什么没有将该“Y”分配给该查询。我不明白。 你能帮我解决这个问题吗。 谢谢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列 物
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);
}