我正在使用 spring-data 和 jpa 存储库进行查询。我有一个问题,我有一个带有 ManyToOne 字段的实体,如果我在查询中按此字段排序,那么我的列表中不会返回该字段为 Null 的任何值。这似乎不是正确的行为。
这是我的实体的样子:
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Size(max = 255)
@Column(name = "name")
private String name;
@JoinColumn(name = "owner_user_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private User ownerUserId;
}
然后是 ManyToOne 用户实体
@Entity
public class User {
@Size(max = 100)
@Column(name = "email")
private String email;
@Size(max = 256)
@Column(name = "first_name")
private String firstName;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ownerUserId", fetch = FetchType.LAZY)
private Collection<Item> itemCollection;
}
我有这样的 JPA 存储库:
@Transactional
public interface ItemRepository extends JpaRepository<Item, Integer> {
@Query("FROM Item i where name = ?1");
Page<Item> findItemWithName(String name, Pageable pageable);
}
我已经简化了很多代码,只是为了让您有所了解。所有查询都运行良好,当我在 Pageable 对象中设置 Sort 以对 owner_user_id 列进行排序时,问题就出现了。如果 item 表中的任何条目的 owner_user_id 为 null,则它们不会在列表中返回。
我可以添加某种注释来解决这个问题吗?或者我还能做些什么?我真的很想继续使用存储库,但如果我无法解决这个问题,我认为我不会。我正在使用休眠和 MYSQL,不确定这是否是问题的一部分。
谢谢。