由于代码库已经在使用Spring Data JPA,我想创建一个Sort 对象,它将基于特定元素的存在(或缺少) 存在于集合中,集合本身是集合中的元素之一 主表。 Sort对象的属性需要是动态的,因为用户可能想要排序 记录一次,另一次记录。
明确地说,如果多个PrimaryEntity对象的SecondaryEntity为' type'设置为特定的 价值,然后我想根据相应的'注释来对它们进行排序。在相应的字段中 SecondaryEntity。此外,虽然我想要检索所有SecondaryEntity对象,我想要的 排序仅基于SecondaryEntity记录,其中' type'等于,比如,重要'。
这些课程如下所示(我还重新定义了'等于'&' hashCode'对于SecondaryEntity):
public class PrimaryEntity
{
@OneToMany(mappedBy = "primary", cascade = CascadeType.ALL)
@MapKey(name = "type")
private Map<String, SecondaryEntity> myMap = new HashMap<>();
@Column(name = "name")
private String name;
}
public class SecondaryEntity
{
@Column(name = "type", length = 200)
private String type;
@Column(name = "notes", length = 2000)
private String notes;
@ManyToOne
@JoinColumn(name = "primary_id", referencedColumnName = "id")
private PrimaryEntity primary;
}
然后我想创建一个类似于以下语法的Sort:
Sort sort = new Sort(&#34; myMap [important] .notes&#34;)
最后,当我努力按照上面的方式对PrimaryEntity记录进行排序时,它并不重要 对于给定的PrimaryEntity,我如何显示其SecondaryEntity记录。
例如,
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
</style>
</head>
<body>
<table>
<tr>
<th>Name</th>
<th>Type</th>
<th>Notes</th>
</tr>
<tr>
<td>Second primary</td>
<td>Important</td>
<td>1</td>
</tr>
<tr>
<td>Second primary</td>
<td>Other</td>
<td>2</td>
</tr>
<tr>
<td>Second primary</td>
<td>Miscellaneous</td>
<td></td>
</tr>
<tr>
<td>Third primary</td>
<td>Important</td>
<td>2</td>
</tr>
<tr>
<td>First primary</td>
<td>Important</td>
<td>3</td>
</tr>
</table>
</body>
</html>
谢谢。
答案 0 :(得分:0)
您可以选择使用findAll(Sort sort)
注释覆盖SecondaryRepo
中的@EntityGraph
方法:
public interface SecondaryRepo extends JpaRepository<Secondary, Long> {
@EntityGraph(attributePaths = {"primary"})
@Override
List<Secondary> findAll(Sort sort);
}
急切地获取相关的Primaries。
然后只需使用Sort
和type
定义note
并获取辅助代码(也将包含其初级代码),如下所示:
Sort sort = new Sort(new Sort.Order("type"), new Sort.Order("note"));
List<Secondary> list = secondaryRepo.findAll(sort);