2017-07-07 46 views
1

由於代碼庫已經在使用Spring Data JPA,我想創建一個排序 對象,該對象將基於一個對象的存在(或缺少)特定元素 出現在集合本身中,該集合本身是 主表中的元素之一。 Sort對象的屬性需要是動態的,因爲用戶可能希望以一種方式對下一次記錄進行排序。Spring Data JPA,基於嵌套集合中可能條目的動態排序

明確,如果有多個PrimaryEntity對象具有設置爲特定 值「類型」一SecondaryEntity,然後,我會希望他們在相應的 SecondaryEntity在相應的「註釋」字段基礎進行排序。此外,雖然我想要檢索所有SecondaryEntity對象,但我希望 排序僅基於SecondaryEntity記錄,其中'type'等於'重要'。

的類看起來如下(我也重新定義了「等於」爲SecondaryEntity &「的hashCode」):

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; 

} 

然後我會想創造一種類似於他語法如下:

排序排序=新的排序(「MYMAP [重要] .notes」)

最後,雖然我努力的PrimaryEntity記錄按照上述排序,這不要緊, 我怎麼樣,對於一個給定PrimaryEntity,其S顯示二級實體記錄。

例如,

<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

你好,如果答案幫助你不要忘記接受/ upvote它。 – Cepr0

回答

0

您可以選擇覆蓋在SecondaryRepofindAll(Sort sort)@EntityGraph註釋:

public interface SecondaryRepo extends JpaRepository<Secondary, Long> { 

    @EntityGraph(attributePaths = {"primary"}) 
    @Override 
    List<Secondary> findAll(Sort sort); 
} 

急切地獲取相關的初選。

然後,只需定義Sorttypenote並獲取二級工具(這將也含有初選)是這樣的:

Sort sort = new Sort(new Sort.Order("type"), new Sort.Order("note")); 
List<Secondary> list = secondaryRepo.findAll(sort); 

exampletest