如何使用Spring JPA的示例查询不仅查询实体本身,而且使用findAll()
查询相关实体的属性?当相关实体属性设置在探测/示例实体上时,我们所有的尝试似乎都忽略了它们。
文件指出:
属性说明符接受属性名称(例如firstname和lastname)。您可以通过将属性与点(address.city)链接在一起来导航。您还可以使用匹配选项和区分大小写对其进行调整。
然而,没有例子表明链接应该如何工作,我们使用它的尝试也没有成功。
虚构的例子
假设数据库结构具有多对多关系:
>
表格:书
表:类别
表:Book\u类别
书Java语言
@Data
@Entity
public class Book {
public Book () {}
public Book(String title, List<Category> categories) {
this.title = title;
this.categories = categories;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
private String title;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "book_category",
joinColumns = {@JoinColumn(name = "book_id")},
inverseJoinColumns = {@JoinColumn(name = "category_id")}
)
private List<Category> categories;
}
BookRepository。Java语言
@Repository
public class BookRepository extends JpaRepository<Book, long> {
}
类别Java语言
@Data
@Entity
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
private String name;
}
类别存储。Java语言
@Repository
public class CategoryRepository extends JpaRepository<Category, long> {
}
书本ervice.java
public class BookService {
@Autowired
private BookRepository bookRepository;
@Autowired
private CategoryRepository categoryRepository;
public List<Book> findByExample(String title, String category) {
ExampleMatcher matcher = ExampleMatcher.matchingAll()
.withMatcher("title", match -> match.contains().ignoreCase())
// ### This is (probably?) the bit that's wrong - none of these made any difference
//.withMatcher("categories.id", match -> match.contains())
//.withMatcher("categories.name", match -> match.contains().ignoreCase())
//.withMatcher("categories", match -> match.contains())
// ###
.withIgnoreNullValues() // ignore unset properties when finding
.withIgnorePaths("id"); // ignore primitives as they default to 0
List<Category> matchingCategories = categoryRepository.findAllByName(category);
Example<Book> example = Example.of(new Book(
title, matchingCategories), matcher);
return bookRepository.findAll(example)
}
}
呼叫BookService。findByExample(…)根据标题正确过滤,但完全忽略类别。“真实”的例子更为复杂,但这提炼出了我们面临的问题;我们如何在相关表和基本表上进行筛选?
这仅适用于ToOne关系,不适用于ToOne,就像您的情况一样:
属性说明符接受属性名称(例如firstname和lastname)。您可以通过将属性与点(address.city)链接在一起来导航。您还可以使用匹配选项和区分大小写对其进行调整。
我还查看了Spring数据源代码,如下所示:
for (SingularAttribute attribute : type.getSingularAttributes()) {
因此,它只使用SingularAttribute,如基本体、字符串和ToOne关系。
所以我很担心,但你试图实现的目标似乎是不可能的。
问题内容: 我还没有找到任何官方文档。但是afaik,是否在没有括号的情况下使用我们的类实例化没有关系-只要不涉及参数,对吗? 要么 但是谁能告诉我性能是否有所不同?“更正确”的方法是哪一种?有任何官方文件吗? 问题答案: 性能上的任何差异将绝对可以忽略。 虽然这两种方式都很好,我个人更喜欢使用 ,因为通常情况下,一个方法 是 正在这里所说的,和PHP函数/方法调用时需要。而且,它与带有参数的实例
当我执行部署并描述pod时,我看到在输出底部的'Events'下列出了以下内容: (这是令人困惑的,因为它将年龄声明为2m1s-但大于这个值-所以我不确定它为什么将这个值报告为年龄) 就绪探测随后以相同错误失败。IP号与我的pod的IP匹配,我在pod描述中的下看到了这一点: 活性和就绪探针的失败导致pod不断终止和重新启动。 该应用程序有一个默认的页面,所以我相信如果健康探测能够连接,它应该会收
我有这些实体: 用户 角色 权限 一个用户有很多角色,一个角色有很多权限。 null
所需实体大致如下: 这是与中间表的多对多关系: 集团 我想要实现的查询(通过Criteria API)基本上与以下JPQL相同: 我尝试按如下方式构造CriteriaQuery: 由于实体没有关联关系,我不知道如何调用join(…)方法 我必须反向声明关联,即从Group成员实体声明关联: JPA的Criteria API是否有此限制?不包含关联字段的实体如何与其他实体连接?
我已经浏览了Stackoverflow一整天,寻找如何做到这一点,但我还没有成功 我正在将我制作的一个快速游戏打包成一个可执行的jar,但我没有正确地引用图像,我只是引用了文件 我的类在src default package中,我不确定应该在哪里添加映像,或者是否必须将映像添加到构建路径中,或者在最新版本的eclipse中将映像添加到构建路径中的正确方法
问题内容: 该SQL语句如何转换为Propel(1.6.3)? 由于tableA和tableB不共享外键,也没有定义关系。 无法运作,因为Propel报错: “致命错误:消息’TableA表上的未知关系TableB的未捕获异常’PropelException’ 非常感谢您的帮助和提示!这是我在这里的第一篇文章,希望我还没有做错任何事情:-)(在发布之前,我已经进行了彻底的搜索!) 问题答案: 您可