Note that there are some explanatory texts on larger screens.

plurals
  1. POJPA - Issue using Criteria inner join table with composite key
    primarykey
    data
    text
    <p>Hi i try to this query using Criteria:</p> <pre><code> select p.idpregled,p.idkarton,p.datum_pregleda,k.status from pregled p inner join karton k on p.idkarton = k.idkarton where k.status ='Otvoren'; </code></pre> <p>relations between these 2 table is like this:</p> <pre><code>table karton idkarton (pk) .. .. table pregled idpregled (pk) idkarton (pk,fk) . . </code></pre> <p>code of two of these 2 table:</p> <pre><code>@Entity @Table(name ="karton") public class Karton implements Serializable { /** * */ private static final long serialVersionUID = 1L; @Id private KartonPrimaryKey pk = new KartonPrimaryKey(); @Column(name ="status", nullable = false) private String status; @Column(name="datum_otvaranja" , nullable = false) private Date datumOtvaranja; @Column(name = "napomena") private String napomena; @ManyToOne(targetEntity = Pacijent.class) @JoinColumn(name ="idpacijent",nullable = false,unique = true) private Pacijent pacijent; @OneToMany(mappedBy = "pk.kartonForeignKey") @GwtTransient private List&lt;Pregled&gt; pregledi = new LinkedList&lt;Pregled&gt;(); public KartonPrimaryKey getPk() { return pk; } public void setPk(KartonPrimaryKey pk) { this.pk = pk; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Date getDatumOtvaranja() { return datumOtvaranja; } public void setDatumOtvaranja(Date datumOtvaranja) { this.datumOtvaranja = datumOtvaranja; } public String getNapomena() { return napomena; } public void setNapomena(String napomena) { this.napomena = napomena; } public Pacijent getPacijent() { return pacijent; } public void setPacijent(Pacijent pacijent) { this.pacijent = pacijent; } public List&lt;Pregled&gt; getPregledi() { return pregledi; } public void setPregledi(List&lt;Pregled&gt; pregledi) { this.pregledi = pregledi; } public int hashCode(){ final int prime = 31; int result = 1; result = prime * result +((pregledi == null) ? 0 : pregledi.hashCode()); result = prime * result +((pk == null) ? 0 : pk.hashCode()); return result; } public boolean equals(Object obj){ if (this == obj) return true; if (obj == null) return false; if(getClass() != obj.getClass()) return false; final Karton other = (Karton) obj; if (pregledi == null) { if(other.pregledi != null) return false; }else if(!pregledi.equals(other.pregledi)) return false; if (pk == null) { if(other.pk != null) return false; }else if(!pk.equals(other.pk)) return false; return true; } } @Embeddable public class KartonPrimaryKey implements Serializable { /** * */ private static final long serialVersionUID = 1L; @Column(name ="idkarton") Integer idKarton; public Integer getIdKarton() { return idKarton; } public void setIdKarton(Integer idKarton) { this.idKarton = idKarton; } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((idKarton == null) ? 0 : idKarton.hashCode()); // result = prime * result + ((version == null) ? 0 : version.hashCode()); return result; } public boolean equals(Object obj) { if(this == obj) return true; if(obj == null) return false; if(getClass() != obj.getClass()) return false; final KartonPrimaryKey other = (KartonPrimaryKey) obj; if (idKarton == null) { if(other.idKarton != null) return false; }else if(!idKarton.equals(other.idKarton)) return false; return true; } } @Entity @Table(name = "pregled") @AssociationOverrides({ @AssociationOverride(name = "pk.idPregled", joinColumns = @JoinColumn(name = "idpregled")), @AssociationOverride(name = "pk.kartonForeignKey", joinColumns = @JoinColumn(name = "idkarton")) }) public class Pregled implements Serializable { /** * */ private static final long serialVersionUID = 1L; @EmbeddedId PregledKartonId pk = new PregledKartonId(); @Column(name ="datum_pregleda") private Date datumPregleda; @ManyToOne(targetEntity = Dijagnoza.class) @JoinColumn(name ="iddijagnoza",nullable = false) private Dijagnoza dijagnoza; @OneToMany(mappedBy = "primaryKey.pregledForeignKey") @GwtTransient private List&lt;PregledStavke&gt; pregledStavke = new LinkedList&lt;PregledStavke&gt;(); public Dijagnoza getDijagnoza() { return dijagnoza; } public void setDijagnoza(Dijagnoza dijagnoza) { this.dijagnoza = dijagnoza; } public PregledKartonId getPregledKarton() { return pk; } public void setPregledKarton(PregledKartonId pregledKarton) { this.pk = pregledKarton; } @Transient public Integer getIdPregled() { return pk.getIdPregled(); } public void setIdPregled(Integer id) { pk.setIdPregled(id); } public PregledKartonId getPk() { return pk; } public void setPk(PregledKartonId pk) { this.pk = pk; } public List&lt;PregledStavke&gt; getPregledStavke() { return pregledStavke; } public void setPregledStavke(List&lt;PregledStavke&gt; pregledStavke) { this.pregledStavke = pregledStavke; } @Transient public Karton getKarton() { return getPregledKarton().getKartonForeignKey(); } public void setKarton(Karton karton) { getPregledKarton().setKartonForeignKey(karton); } public Date getDatumPregleda() { return datumPregleda; } public void setDatumPregleda(Date datumPregleda) { this.datumPregleda = datumPregleda; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Pregled that = (Pregled) o; if (pregledStavke == null) { if (that.pregledStavke != null) { return false; } }else if(!pregledStavke.equals(that.pregledStavke)) return false; if (pk == null) { if (that.pk != null) return false; }else if (!pk.equals(that.pk)) return false; return true; } // public int hashCode() { final int prime = 31; int result = 1; result = prime * result +((pregledStavke == null) ? 0 : pregledStavke.hashCode()); result = prime * result + ((pk == null) ? 0 : pk.hashCode()); return result; } } @Embeddable public class PregledKartonId implements Serializable { @GeneratedValue @Column(name = "idpregled") Integer idPregled; @ManyToOne private Karton kartonForeignKey; public Integer getIdPregled() { return idPregled; } public Karton getKartonForeignKey() { return kartonForeignKey; } public void setKartonForeignKey(Karton kartonForeignKey) { this.kartonForeignKey = kartonForeignKey; } public void setIdPregled(Integer idPregled) { this.idPregled = idPregled; } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((idPregled == null)? 0 : idPregled.hashCode()); result = prime + result + ((kartonForeignKey == null) ? 0 : kartonForeignKey.hashCode()); return result; } public boolean equals(Object o){ if (this == o) return true; if(o == null) return false; if(getClass() != o.getClass()) return false; final PregledKartonId that = (PregledKartonId) o; if(idPregled == null){ if(that.idPregled != null) return false; }else if(!idPregled.equals(that.idPregled)) return false; if(kartonForeignKey == null){ if(that.kartonForeignKey != null) return false; }else if(!kartonForeignKey.equals(that.kartonForeignKey)) return false; return true; } } </code></pre> <p>i try this code of criteria ,but this was not successfully:</p> <pre><code>Criteria criteria = session.createCriteria(Pregled.class); criteria.setFetchMode("kartonForeignKey", FetchMode.JOIN).add(Restrictions.eq("status", "Otvoren")); List&lt;Pregled&gt; pregledi = criteria.list(); </code></pre> <p>this code trows me this error in stacktrace:</p> <pre><code>com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List com.fit.klinika.client.pregled.PregledService.queryPregledOtvoren()' threw an unexpected exception: org.hibernate.QueryException: could not resolve property: status of: com.fit.klinika.client.pregled.Pregled at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) </code></pre> <p>thanks in advance :)</p> <p>When i try to this :</p> <pre><code> Criteria criteria = session.createCriteria(Pregled.class,"pregled"); criteria.createAlias("pregled.pk.kartonForeignKey","karton"); </code></pre> <p>this works fine,if i added this line of code using where coditions:</p> <pre><code>criteria.add(Restrictions.eq("karton", "Otvoren")); </code></pre> <p>throws me same Error ???</p> <p>Then I have done some search on google about this and find that ,this issue didn't fix by hibernate </p> <p><a href="https://hibernate.onjira.com/browse/HB-417" rel="nofollow">https://hibernate.onjira.com/browse/HB-417</a> ,</p> <p><a href="https://hibernate.onjira.com/browse/HHH-1742" rel="nofollow">https://hibernate.onjira.com/browse/HHH-1742</a> ,</p> <p><a href="https://hibernate.onjira.com/browse/HHH-1570" rel="nofollow">https://hibernate.onjira.com/browse/HHH-1570</a></p> <p>this bug comes from year 2003 ,and isn't fixed by hibernate,Is this possible??wtf?!?!?!?</p> <p>Correct me if i'm wrong :)...</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload