我正在使用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列进行排序时,就会出现问题。如果项目表中的任何条目的owner_user_id为null,则它们不会在列表中返回。
我可以添加某种注释来解决此问题吗?还是我可以做的其他事情?我真的很想继续使用存储库,但是如果我不能解决这个问题,我认为我不会。我正在使用hibernate和MYSQL,不确定是否是问题的一部分。
谢谢。
这是Spring Data / JPA Spec中的一个已知问题,在1.2.1版本中已解决。参见https://jira.springsource.org/browse/DATAJPA-252和https://jira.spring.io/browse/DATAJPA-277。