java - 解决 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);
}
解决方案
没有“最终的 JPQL 最终被翻译成带有插入参数的最终 SQL”之类的东西。JPA 实现如何生成 SQL 取决于它,并且参数通常永远不会被替换为任何字符串。SQL 是从表达式树等生成的,而不是 String。这是一个条件查询,因此对于参数它将显示“?” 在控制台上。
如果您想插入参数值,请自己做,因为它只对您有意义
推荐阅读
- c++ - 如果我将流用于基类构造函数,我可以将流的其余部分用于派生吗?
- mysql - 使用更改的 IP 地址连接到 Google Cloud MySql DB
- swift - 阿拉莫火,无聊ssl_context_handle_fatal_alert
- sql-server - Tombstone 清理失败,出现异常“当前操作无法完成,因为没有为同步配置数据库
- html - 导航栏图像未加载
- python - PySimpleGUI 表格元素可以自动滚动到底部吗?
- php - 如何在 php 中格式化此数组/json 中的数据
- ios - 如何在 Swift 中使用 Moya 实现 SSL 固定 - 公钥固定(不是证书固定)?
- .htaccess - 将 md5 哈希添加到 htaccess 中的 URL 以防止缓存
- delay - 如何在 1 小时的时间范围内按分钟数延迟 pine 脚本中的订单?