当前位置: 首页 > 面试题库 >

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

佟涵畅
2023-03-14
问题内容

我正在使用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。



 类似资料:
  • 我使用spring数据和jpa存储库进行查询。我遇到了一个问题,我有一个带有多个字段的实体,如果我在查询中按这个字段排序,那么这个字段的任何值都不会返回到我的列表中。这似乎不是正确的行为。 以下是我的实体的外观: 然后是多用户实体 我有我的JPA仓库像这样: 我已经简化了很多代码,这样你就可以得到一个想法。所有的查询都运行得很好,当我在可分页对象中将排序设置为owner_user_id列排序时,问

  • 我们使用Cassandra的用例是显示一篇博客文章的前10名最近访问者。以下是Cassandra表定义 现在,为了显示给定博客帖子的前10名最近访问者,需要在时间戳desc上有一个明确的“order by”子句。因为visted_ts不是Cassandra中集群列的一部分,所以我们无法完成这项工作。visited_ts不是集群列的一部分的原因是为了避免记录重复(读为重复)访问者。主键的设计方式是为

  • 问题内容: 我有一个使用IN子句的存储过程。在我的ASP.NET应用程序中,我有一个多行文本框,可为存储过程提供值。我希望能够按在文本框中输入的值进行排序。我发现如何在mySQL中轻松地执行此操作(使用FIELD函数),而不是与SQL Server等效的方法。 所以我的查询看起来像: 因此,我将从应用程序中传递值,例如‘113113’,‘112112’,‘114114’(以任意顺序)。我想按该列表

  • 问题内容: 对于每一行,我想将每个描述的相关性与未定义数量的关键字进行比较。我知道“ THEN +1”不起作用,但是我想得出这个结果(…为每个存在的关键字增加一个数字(每行从0开始) 因此,如果描述包含“ keyword1”和“ keyword2”,则此行的relevance_description应该为2。 问题答案: 您可以使用单独的子句执行此操作,然后将它们添加在一起: 在某些数据库中,布尔

  • rank ▲ ✰ vote url 49 432 198 616 url 通过列表中字典的值对列表进行排序 我的到了一个字典的列表,我想对字典的值进行排序. [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] 对name进行排序,应当是: [{'name':'Bart', 'age':10}, {'name':'Homer', 'age

  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast