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 ")