3

In meinem Projekt habe ich Probleme beim Schreiben einer createCriteria Abfrage mit einem zusammengesetzten Primärschlüssel. Meine Entity Klasse & DAO-Methode sind unten angegeben -Hibernate createCriteria Abfrage mit Annotation-basierten Composite-Primärschlüssel

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

Der Fehler I bin immer - org.hibernate.QueryException: kein Verein: metricsID.project_id

ich mehrere ähnliche Beispiele gesucht, und verwendete Alias ​​auf den Vorschlag eines der Suchergebnisse, aber es ist mein erstes Mal mit einem Alias. Was mache ich falsch?

Antwort

1

Warum brauchen Sie einen Alias? Hast du versucht direkt zuzugreifen?

Nach dieser example sollte dieser Code arbeiten

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