Запрос Hibernate createCriteria с составным первичным ключом на основе аннотаций

В моем проекте у меня возникли проблемы с написанием запроса createCriteria с составным первичным ключом. Мой класс Entity и метод DAO приведены ниже:

    @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;
    }

Я получаю сообщение об ошибке: org.hibernate.QueryException: не ассоциация: metricsID.project_id

Я искал несколько похожих примеров и использовал псевдоним по предложению одного из результатов поиска, но я впервые использую псевдоним. Что я делаю неправильно?


person Avi Bis    schedule 03.06.2016    source источник


Ответы (1)


Зачем вам нужно использовать псевдоним? Вы пытались получить доступ напрямую?

Следуя этому примеру, этот код должен работать

@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;
}
person RubioRic    schedule 03.06.2016