Тема: Hibernate CriteriaBuilder i inner join
Доброго дня, товариство.
Не можу ніяк розібратися, як зробити простий запит, ось такого плану, але з допомогою CriteriaBuilder в Hibernate.
SELECT units.model, works.task, works.opened 
FROM works inner join units on works.unit_id = units.id_unit
where opened = 1;MySQL видає ось таку таблицю(з ліва), а код який генерує запит(з права) приведу нижче
CriteriaQuery<Work> cq = builder.createQuery(Work.class);
Root<Work> rootW = cq.from(Work.class);
rootW.join("unit");
cq.where(builder.equal(rootW.get("opened"), true));
Query<Work> query1 = session.createQuery(cq);
List<Work> resultList1 = query1.getResultList();
resultList1.forEach((w)->{ System.out.println("\t"+ w.getTask()); });Отож, як згенерувати запит так, щоб було поле units.model. зв'язок між таблицями, як видно по ентиті, OneToMany, тобто один Unit має багато WORKів.
// Unit.java
@Entity
@Table(name = "units")
public class Unit {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_unit")
    private int idUnit;
    
    @Column(name = "model")
    private String model;
    
    @OneToMany(mappedBy = "unit", cascade = CascadeType.ALL)
    private List<Work> works = new ArrayList<Work>();
       // далі ідуть Getters i Setters}
// Work.java
@Entity
@Table(name = "works")
public class Work {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_work")
    private int idWork;
    
    @Column(name = "task")
    private String task;
    
    @Column(name = "opened")
    private boolean opened;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "unit_id")
    private Unit unit;
}