【发布时间】:2021-01-14 16:01:15
【问题描述】:
我正在尝试使用 JPQL 从数据库中获取属性详细信息的详细信息,听说我正在写 where 条件,如 (properties.IsDeleted 'Y' or properties.IsDeleted IS NULL) 但是,在 JPQL 查询中它没有得到 'Y',而是显示为 '?' 符号。这是我遇到的问题。请帮助我解决这个问题。
下面的代码显示如下查询:-
选择 properties0_.property_id 作为 col_0_0_, properties0_.property_type 作为 col_1_0_,property0_.property_name 作为 col_2_0_, properties0_.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_deletedY
为什么没有将 "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);
}
【问题讨论】: