java - JPQL 构造函数忽略具有 NULL 值的行
问题描述
我有以下声明:
@Query("SELECT "
+ "new com.app.model.RestaurantOrderPartial( "
+ "o.orderId, o.orderedAt, o.orderType, o.orderState, o.orderValue, o.deliveryPrice, o.deliveredBy, o.driver) "
+ "FROM Order o "
+ "WHERE o.restaurant.restaurantId = ?1 "
+ "AND o.orderedAt BETWEEN ?2 and ?3 "
+ "ORDER BY o.orderedAt DESC ")
List<RestaurantOrderPartial> getRestaurantOrdersCompressed(long restaurantId, LocalDateTime dateBeforePeriod, LocalDateTime now); //12 Month
表 where o.driver
is中的行NULL
,构造函数不构造对象的条目,也不将其包含在结果列表中。
为什么会有这种行为?以及如何让构造函数包含 Driver 为空的条目,在自定义对象RestaurantOrderPartial
中,Driver 对象将根据 Column 中的值为空。
这是我的 POJO:
public class RestaurantOrderPartial {
private long orderId;
private LocalDateTime orderedAt;
private OrderType orderType;
private OrderState orderState;
private Long orderValue;
private int deliveryPrice;
private DeliveredBy deliveredBy;
private Driver driver;
}
public class Driver {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long driverId;
@Column
private String email;
@Column
private String password;
@Column
private String fullName;
@Column
private String phoneNumber;
@Column
private String secondaryPhoneNumber;
@Column
private String fullAddress;
@Column
private boolean isActive;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cityId")
private City city;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "locationId")
private Location location;
@JsonIgnore
@OneToMany(mappedBy="driver")
private List<Order> orders;
谢谢你的帮助。
解决方案
如果你想在 o.driver 为 null 的情况下获取它,你必须指定一个左外连接;o.driver 始终是一个内部连接,因此会从结果中过滤掉空值。
尝试更多类似的东西
"SELECT "
+ "new com.app.model.RestaurantOrderPartial( "
+ "o.orderId, o.orderedAt, o.orderType, o.orderState, o.orderValue, o.deliveryPrice, o.deliveredBy, driver) "
+ "FROM Order o LEFT OUTER JOIN o.driver driver"
+ "WHERE o.restaurant.restaurantId = ?1 "
+ "AND o.orderedAt BETWEEN ?2 and ?3 "
+ "ORDER BY o.orderedAt DESC ")
推荐阅读
- git - 我可以使用 GitHub 在未关闭的远程仓库上创建 PR 吗?
- java - SimpleDateFormat 解析方法之谜
- javascript - 调用 setInterval 后继续函数
- sql - SSAS 表格 - 更新表而不是处理完整的其他选项...?
- node.js - Nodejs-Request 承诺从 POST 获取 JSON 响应正文
- android - 使用多个键搜索和更新 Firebase
- python - 运行多个 libpostal 实例
- java - 抽象类 Java
- rabbitmq - Camel RabbitMQ concurrentConsumers 和 threadPoolsize 用于必须按顺序处理的消息
- c - C - 自动分配给下一个字符数组的截断字符数组输入