我正在爲我的查詢使用spring-data和jpa存儲庫。我有一個問題,我有一個具有ManyToOne字段的實體,如果我通過查詢中的此字段進行排序,那麼在我的列表中不會返回任何具有該字段空值的值。這看起來不像是正確的行爲。Spring數據JPA存儲庫通過在結果中丟失空值來排序
下面列舉一下我的實體樣子:
@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;
}
然後多對一用戶實體
@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對象中設置排序以在owner_user_id列上進行排序時出現問題。如果項目表中的任何條目對於owner_user_id具有空值,則它們不會返回到列表中。
是否有某種註解可以添加來解決這個問題?或者我可以做的其他事情?我真的想繼續使用存儲庫,但不認爲我會如果我不能解決這個問題。我正在使用hibernate和MYSQL,不知道這是否是問題的一部分。
謝謝。
爲了解決這個問題,我創建了一個處理左連接的視圖,並構建了JpaRepository。 – devo