How can I write this SQL query in Hibernate? I would like to use Hibernate to create queries, not create the database.
SELECT * FROM Employee e INNER JOIN Team t ON e.Id_team=t.Id_team
I created entity classes in SQLServer2008,
@Entity
@Table(name="EMPLOYEE")
public class Employee
{
@Id @GeneratedValue
@Column(name="ID_EMPLOYEE")
private int id_employee;
@Column(name="SURNAME")
private String surname;
@Column(name="FIRSTNAME")
private String firstname;
@Column(name="ID_PROFESSION")
private int id_profession;
@Column(name="ID_BOSS")
private int id_boss;
@Column(name="HIRED_DATE")
private Date hired;
@Column(name="SALARY")
private double salary;
@Column(name="SALARY_ADD")
private double salary_add;
@Column(name="ID_TEAM")
private int id_team;
//setters and getters
}
@Entity
@Table(name="TEAM")
public class Team
{
@Id @GeneratedValue
@Column(name="ID_TEAM")
private int id_team;
@Column(name="TEAMNAME")
private String teamname;
@Column(name="ADDRESS")
private String address;
//setters and getters
}
I tried to build working select query in many ways but it still doesn't work.
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
String select = "FROM Employee e INNER JOIN Team t ON e.Id_team=t.Id_team";
Query query = session.createQuery(select);
List elist = query.list();
session.getTransaction().commit();
session.close();
Maybe something is wrong with entities?
You can do it without having to create a real Hibernate mapping. Try this:
We have two entities Employee and Address with One to Many relationship.
By this way we can implement inner join between two tables
I have used Java 8 for loop for priting the names. Make sure you have jdk 1.8 with tomcat 8. Also add some more records for better understanding.
Joins can only be used when there is an association between entities. Your Employee entity should not have a field named
id_team
, of typeint
, mapped to a column. It should have a ManyToOne association with the Team entity, mapped as a JoinColumn:Then, the following query will work flawlessly:
Which will load all the employees, except those that aren't associated to any team.
The same goes for all the other fields which are a foreign key to some other table mapped as an entity, of course (
id_boss
,id_profession
).It's time for you to read the Hibernate documentation, because you missed an extremely important part of what it is and how it works.