3

내 프로젝트에서 합성 기본 키를 사용하여 createCriteria 쿼리를 작성하는 데 문제가 있습니다. ,어노테이션 기반 복합 기본 키로 Hibernate createCriteria 쿼리

나는 몇 가지 유사한 사례를 검색

metricsID.project_id :하지 협회 : org.hibernate.QueryException -

@Entity 
    @Table(name="METRICS") 

public class Metrics implements Serializable { 

    private static final long serialVersionUID = -2580493160757497919L; 

    @EmbeddedId 
    protected MetricsID metricsID; 

    @Column(name="PROJ_PERF") 
    private String proj_perf; 

    @Column(name="ANALYSIS") 
    private String analysis; 

    public String getProj_perf() { 
     return proj_perf; 
    } 

    public void setProj_perf(String proj_perf) { 
     this.proj_perf = proj_perf; 
    } 

    public String getAnalysis() { 
     return analysis; 
    } 

    public void setAnalysis(String analysis) { 
     this.analysis = analysis; 
    } 

    public MetricsID getMetricsID() { 
     return metricsID; 
    } 

    public void setMetricsID(MetricsID metricsID) { 
     this.metricsID = metricsID; 
    } 

} 

@Embeddable 
public class MetricsID implements Serializable { 

    private static final long serialVersionUID = 4691163770334366543L; 

    @Column(name="PROJECT_ID") 
    private String project_id; 

    @Column(name="METRICS_NO") 
    private int metrics_no; 

    public String getProject_id() { 
     return project_id; 
    } 

    public void setProject_id(String project_id) { 
     this.project_id = project_id; 
    } 

    public int getMetrics_n0() { 
     return metrics_no; 
    } 

    public void setMetrics_no(int i) { 
     this.metrics_no = i; 
    } 
} 

    @Override 
    @Transactional 
    public List<Metrics> viewMetrics(String project_id) throws Exception { 
     List<Metrics> metrics = (List<Metrics>)sessionFactory.getCurrentSession(). 
       createCriteria(Metrics.class).createAlias("metricsID.project_id", "project_id_alias"). 
       add(Restrictions.eqProperty("project_id_alias.project_id", project_id)).list(); 
     return metrics; 
    } 

I는 무엇입니까 오류 - 내 엔티티 클래스 & DAO 방법은 아래에서 언급 검색 결과 중 하나의 제안에 별칭을 사용했지만 별칭을 사용한 것은 처음입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

왜 별칭을 사용해야합니까? 직접 액세스하려 했습니까?

example에 따라,이 코드는 작동합니다

@Override 
@Transactional 
public List<Metrics> viewMetrics(String project_id) throws Exception { 
    List<Metrics> metrics = 
     (List<Metrics>) sessionFactory.getCurrentSession() 
            .createCriteria(Metrics.class) 
            .add(Restrictions.eq("metricsID.project_id", project_id)) 
            .list(); 
    return metrics; 
}