クエリに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オブジェクトの[並べ替え]をowner_user_id列で並べ替えるように設定すると、問題が発生します。アイテムテーブルのいずれかのエントリのowner_user_idがnullの場合、それらはリストに返されません。
これを回避するために追加できる注釈の種類はありますか?または私ができる他の何か?私は本当にリポジトリを使い続けたいのですが、これを回避できなければそうは思わないでしょう。私は休止状態とMYSQLを使用していますが、それが問題の一部であるかどうかはわかりません。
ありがとう。