Tengo la siguiente clase de entidad

public class Customer {
    @Id
    private int id;
    @Column(name = "CID")
    private String cid;
}


public class Alccs {
    @Id
    private int vid;
//    @Column(name = "CID")
//    private String cid;

    @ManyToOne
    @JoinColumn(name = "CID", referencedColumnName = "CID")
    private Customer customer;
}


public class Rtwo {
    @Id
    private int jobNo;

    @ManyToOne
    @JoinColumn(name = "CID", referencedColumnName = "CID")
    private Customer customer;
}




public class RTwoCycle {
    @Id
    private int cycleJobNo;
    @Column
    private int vid;

    @ManyToOne
    @JoinColumn(name = "JobNo", referencedColumnName = "JobNo")
    private TblRtwo tblRtwo;

}

¿Cómo escribo una consulta como la siguiente usando HQL y criteria

select top 20 * from RTwoCycle rtCycle join Alccs al on rtCycle.vid = al.vid;

Para HQL intenté seguir

from TBLRTwoCycle rtCycle join TBLAL al on rtCycle.vid = al.vid

Pero obteniendo el error QuerySyntaxException: Path expected for join!

Y sobre criterios no sé cómo hacerlo

¿¿como hacer esto??

0
LynAs 10 sep. 2018 a las 11:48

3 respuestas

La mejor respuesta

Para HQL una simple unión y on clause es suficiente

from table1 as t1 inner join table2 as t2 on t1.vid=t2.vid

O

from table1 as t1, table2 as t2 where t1.vid=t2.vid

Para los criterios Restriction.sqlRestriction es la solución para este problema

session.createCriteria(Class1,"c1")
        .createAlias("class2", "c2")
        .add(Restrictions.sqlRestriction("c1.vid=c2.vid")
0
LynAs 18 sep. 2018 a las 05:49

Las versiones JPA e Hibernate anteriores a 5.1 requieren una relación definida para unir dos entidades en una consulta JPQL. Eso a menudo conduce a declaraciones JOIN en cascada para atravesar el gráfico de relación entre las entidades o la declaración de que una UNIÓN de las entidades no es posible con JPQL si no hay una relación entre ellas.

Hibernate 5.1 introdujo uniones explícitas en entidades no relacionadas. La sintaxis es muy similar a SQL y le permite definir los criterios JOIN en una instrucción ON.

Más información

0
Angad Bansode 10 sep. 2018 a las 10:10
  1. from RTwoCycle as rtCycle inner join Alccs as al with rtCycle.vid = al.vid
0
Seymur Asadov 10 sep. 2018 a las 11:54