1

I'm new with Hibernate and Criteria Query. How can I implement it with Hibernate Criteria Object?

SELECT stateslocalization.StateId, stateslocalization.localization AS name
FROM processstate
Join states ON  states.id = processstate.StateId
JOIN stateslocalization ON stateslocalization.StateId = states.id
WHERE processstate.ProcessId = 38 and processstate.StateId = states.id AND stateslocalization.StateId = states.id

Entities:

Process:

@Entity
@Table(name = "processes")
public class Process {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String name;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JoinTable(
        name = "processstate",
        joinColumns = {@JoinColumn(name = "ProcessId")},
        inverseJoinColumns = {@JoinColumn(name = "StateId")}
    )
    private Set<State> states;

    //getters and setters.....
}

State:

@Entity
@Table(name = "states") 
public class State {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;

    private String name;

    @ManyToMany(mappedBy = "states", cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    private Set<Process> processes;

    @OneToOne(mappedBy = "state")
    private StateLocalization stateLocalization;

    //getters and setters.....
}

StateLocalization:

@Entity
@Table(name = "stateslocalization")
public class StateLocalization {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "StateId", referencedColumnName = "id")
    private State state;

    private String localization;

    //getters and setters.....
}

I did it with native query but I don't know how I can implement it to Hibernate Criteria, because I don't have entity processstate (it's only table).

zforgo
  • 2,508
  • 2
  • 14
  • 22
Entei
  • 11
  • 3
  • Don't use the criteria API for such static queries. Use JPQL. https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#hql. Once you get the principle of JPQL queries, which uses entities and their associations rather than tables and columns, you'll be able to translate these JPQL queries to criteria queries if you need to generate dynamic queries. – JB Nizet Nov 17 '19 at 20:02
  • Possible duplicate of [jpa criteria for many to many relationship](https://stackoverflow.com/questions/8135612/jpa-criteria-for-many-to-many-relationship) – zforgo Nov 17 '19 at 20:32

0 Answers0