Spring-data JPA存储库通过在结果中丢失空值来进行排序

时间:2012-06-15 14:38:25

标签: hibernate jpa spring-data-jpa

我正在使用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,则它们不会在列表中返回。

我可以添加某种注释来解决这个问题吗?或者其他我可以做的事情?我真的想继续使用存储库,但如果我无法解决这个问题,我认为我不会这样做。我正在使用hibernate和MYSQL,不确定这是否是问题的一部分。

感谢。

1 个答案:

答案 0 :(得分:3)

这是Spring Data / JPA Spec中的已知问题,它在1.2.1版本中得到解决。请参阅https://jira.springsource.org/browse/DATAJPA-252https://jira.spring.io/browse/DATAJPA-277