如何解决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
表中o.driver
为NULL
的行,构造函数没有将条目构造为对象,并且没有将其包括在结果列表中。 / p>
为什么会有这种行为?以及如何让构造函数包括Driver为null的条目,在自定义对象RestaurantOrderPartial
中,根据Column中的值,Driver对象将为null。
这是我的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 ")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。