簡體   English   中英

有沒有辦法使用 Spring JPARepository 中的查詢來填充非列成員?

[英]Is there a way to populate non-column member using a query in Spring JPARepository?

我有以下結構:

@MappedSuperclass
public abstract class Action {
...
}

並且擴展 Action 的實體不多,例如:

@Entity(name="chemistry")
public class Chemistry extends Action implements Serializable {
...
}

為了執行持久性,我使用了 JPARepository:

@NoRepositoryBean
public interface ActionRepository<T extends Action> extends JpaRepository<T, String> {
...
}

和孩子的界面:

@Component 
@Service
@Repository
interface ChemistryRepository extends ActionRepository<Chemistry> {
}

持久性機制適用於從 Action 繼承的所有實體。 現在我有一個問題。 我在數據庫中有另一個表,稱為“action_params”,包括與特定操作(即化學)相關的附加鍵值參數。 我有適當的實體:

@Entity(name="action_params")
public class ActionParams implements Serializable {
...
}

在數據庫中,我不能使用外鍵,因為鍵與特定表無關,但任何表都繼承自 Action。 沒關系,我想使用一個查詢來為每個動作獲取表 action_params 中的記錄,基於它的 id。

我想將一個列表添加到操作中,將這些記錄映射為一個列表。 我嘗試使用 hibernate 但任何查詢都返回空(以下代碼已添加到 Action 類中):

@OneToMany
@JoinFormula(value="select p from action_params p where p.action_id = id")
@Transient
protected List<ActionParams>  actionParamsList;

這是行不通的。 我還嘗試將 ActionParamsRepository 自動連接到 Action 中,但當然沒有辦法做到這一點,我想不出任何其他方式。

您的建議將不勝感激

您必須使用 JPA 關系的有力理由是什么?

如果沒有這樣的原因,我建議您在 ActionParams 存儲庫中實現一個新的 finder 方法。 像這樣的東西:

@Query("select p from action_params p where p.action_id = :actionId")
List<ActionParams> findAllByActionId(@Param("actionId") Long actionId )

我想類型是長的。 如果您有其他類型,請更換它。

您可以使用@Formula ,所以讓我解釋一下,當您對公式進行查詢時,在 Hibernate 中添加了一個子查詢。

@Formula("(SELECT p FROM action_params p WHERE p.action_id = id)")
private List<ActionParams>  actionParamsList;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM