Java JPQL构造函数忽略具有空值的行
我有以下声明:Java JPQL构造函数忽略具有空值的行,java,sql,spring,constructor,jpql,Java,Sql,Spring,Constructor,Jpql,我有以下声明: @Query("SELECT " + "new com.app.model.RestaurantOrderPartial( " + "o.orderId, o.orderedAt, o.orderType, o.orderState, o.orderValue, o.deliveryPrice, o.deliveredBy, o.driver) " + "
@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
公共类驱动程序{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长驱虫;
@纵队
私人字符串电子邮件;
@纵队
私有字符串密码;
@纵队
私有字符串全名;
@纵队
私有字符串电话号码;
@纵队
私有字符串secondaryPhoneNumber;
@纵队
私有字符串地址;
@纵队
私有布尔非活动;
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“cityId”)
私人城市;
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“locationId”)
私人位置;
@杰索尼奥雷
@OneToMany(mappedBy=“driver”)
私人名单订单;
样本数据:
感谢您的帮助。如果希望在o.driver为null时提取它,则必须指定一个左外部联接;o.driver始终是一个内部联接,因此会从结果中过滤掉null值 试试类似的东西
"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 ")
如果驱动程序为空,是否设置restaurantId和oderedAt?是。除o.driver.driver(在引用相应表中的驱动程序的列中的id)外,所有内容都已设置是否对数据库运行hibernate生成的查询,以确保返回的数据包含具有驱动程序值
null
的行,从而排除任何数据设置问题?
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;
"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 ")