【发布时间】:2019-06-02 18:54:38
【问题描述】:
有可能吗?
我想使用 JPARepository 获取具有特定 CCC.incidentAssessmentResultId id 的所有 AAA 对象。有可能吗?
@Entity
@Table(schema = "aaa", name = "table")
public class AAA {
@Column(name = "kryterium")
private String criterion;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "id_kryterium_naruszen")
private List<BBB> violationFactors;
}
public class BBB {
@Column(name = "czynnik")
private String factor;
@Column(name = "stopien")
private float degree;
@JsonManagedReference
@OneToOne(mappedBy = "violationFactor")
private CCC incidentAssessmentFactor;
}
public class CCC {
@Column(name="komentarz")
private String comment;
@Column(name="ocena_naruszenia_wynik_id", updatable=false, insertable=false)
private Long incidentAssessmentResultId; //-> I'd like to find AAA objects with a specific incidentAssessmentResultId ID
@Column(name="czynnik_wybrany")
private Boolean factorIsSelected;
@Column(name = "wartosc_wybrana")
private float value;
@Repository
public interface ViolationCriterionRepository extends JpaRepository<AAA, Long> {
// @Query("select vc from AAA vc left join vc.violationFactors vf left join vf.incidentAssessmentFactor iaf where iaf.incidentAssessmentResultId = ?1")
List<AAA> findByViolationFactors_IncidentAssessmentFactor_IncidentAssessmentResultId(Long incidentId);
}
现在,当我调用 ViolationCriterionRepository .findAll() 时,我会获取所有数据,但我想获取所有数据,但要获取某些 CCC 对象。我在我的存储库中尝试了以下方法,但得到 0 个结果。
更新
我的仓库:
@Repository
public interface ViolationCriterionRepository extends JpaRepository<ViolationCriterion, Long> {
@Query("select vc from AAA vc join vc.violationFactors vf join vf.incidentAssessmentFactor iaf where iaf.incidentAssessmentResultId = ?1")
List<AAA> findByIncidentAssessmentResultId(Long incidentId);
}
【问题讨论】:
-
取消注释您的查询,并为您的方法选择一个可读的名称。这应该足够了(假设 ViolationCriterion 和 AAA 是同一件事)。我会使用内连接而不是左连接。
-
是的,我将我的 Repo 更改为 AAA... 给我一点时间
-
不幸的错误:原因:org.hibernate.QueryException:节点没有数据类型:org.hibernate.hql.internal.ast.tree.IdentNode \-[IDENT] IdentNode: 'cv' { originalText=cv}
-
您使用的是
select cv,然后是from ViolationCriterion vc。始终如一。要么是vc,要么是cv。 -
这只是意味着您的数据库中不存在符合您条件的行。
标签: spring hibernate jpa spring-data-jpa