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

标签 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,不确定这是否是问题的一部分。

谢谢。

最佳答案

这是 Spring Data/JPA Spec 中的一个已知问题,已在 1.2.1 版本中解决。见 https://jira.springsource.org/browse/DATAJPA-252https://jira.spring.io/browse/DATAJPA-277 .

关于hibernate - Spring-data JPA 存储库通过在结果中丢失空值来排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052843/

相关文章:

java - 在不知道来自前端和 JSON 的数据库 ID 的情况下将子实体分配给父实体

java - JPA 和 Hibernate - 标准与 JPQL 或 HQL

java - 如何以毫秒为单位设置带有数据 JPA 事务性的 Spring boot

java - 在 Hibernate 中向多个表中插入数据

java - LazyInitializationException(Spring 和 Vaadin)尽管有 OpenEntityManagerInView

hibernate - 如何将构造函数映射与 Spring JPA 存储库结合使用

java - 未知实体类型异常 : Unable to locate persister

java - FetchType.LAZY 没有从数据库中获取对象

java - ManyToMany 的 JPA Criteria 规范

spring-boot - 如何在 Spring Data Rest 中的两个实体之间发布和放置关系 @OneToMany/@ManyToOne?