![](/img/trans.png)
[英]Hibernate @Entity conflict with Spring @Autowired for non-column object
[英]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.