我使用spring数据和jpa存储库进行查询。我遇到了一个问题,我有一个带有多个字段的实体,如果我在查询中按这个字段排序,那么这个字段的任何值都不会返回到我的列表中。这似乎不是正确的行为。
以下是我的实体的外观:
@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;
}
然后是多用户实体
@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);
}
我已经简化了很多代码,这样你就可以得到一个想法。所有的查询都运行得很好,当我在可分页对象中将排序设置为owner_user_id列排序时,问题就出现了。如果项目表中的任何条目有空值owner_user_id它们不会在列表中返回。
我可以添加一些注释来解决这个问题吗?或者其他我能做的事?我真的很想继续使用存储库,但如果我不能摆脱这个问题,我想我不会。我正在使用hibernate和MYSQL,不确定这是否是问题的一部分。
谢谢。
这是Spring Data/JPA规范中的一个已知问题,在1.2.1版本中得到了解决。看见https://jira.springsource.org/browse/DATAJPA-252和https://jira.spring.io/browse/DATAJPA-277.
问题内容: 我正在使用spring- data和jpa存储库进行查询。我有一个问题,我有一个具有ManyToOne字段的实体,如果我按查询中的该字段排序,则该字段中没有Null的任何值都不会返回到我的列表中。这似乎不是适当的行为。 这是我的实体的样子: 然后是ManyToOne用户实体 我有这样的JPA存储库: 我简化了很多代码,只是为了让您有一个想法。所有查询工作都很好,当我将Pageable对
是否有一种方法可以使通用Spring数据JPA存储库正确处理类似的方法?例如只返回狗,而不返回所有动物?或者至少,最好的变通方法是什么? 它的工作几乎完美,保存每一个动物在自己的桌子上,等等。唯一的问题是:同时返回水豚和狗。这个答案解释说: 这只有在域类使用单表继承时才起作用。我们在引导时能得到的关于domain类的唯一信息是它将是Product对象。因此,对于像findAll()甚至findBy
我读过一些关于在存储库请求中使用空值的帖子,但它们都已经存在多年了。所以我问这个问题是为了了解问题的现状。 我想说的是: 我想要一个带有可选空值的JPA请求。我的存储库中的函数如下所示: 这样我就可以像这样省略过滤器中的参数:(@Query的一部分) 这只在我的参数不为NULL时有效。 请注意,我在这里使用的是原生查询。(JPA实现是Hibernate,DB是postgres) 提前感谢您的每一次
对于方法,如果我发送空白,它可以工作,但值为null。而且,要搜索的字段太多了。所以我正在寻找一种更好的方法来搜索这样的表单。在Grails框架中,我可以为此创建名称,但在中没有找到更好的方法。 有什么想法吗?谢了。
它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。
spring boot jpa/hibernate中的一个简单保存在数据库中保存了一行空值。 @Repository公共接口用户存储库扩展了分页和排序存储库 { } 我的用户表中的每一列都可以为空,因此允许在这种状态下保存记录。我通过手动对数据库执行等效查询来检查这一点。 有人有什么想法吗?