HQL Hibernate INNER JOIN
Comment puis-je écrire cette requête SQL en veille prolongée? Je voudrais utiliser Hibernate pour créer des requêtes, de ne pas créer la base de données.
SELECT * FROM Employee e INNER JOIN Team t ON e.Id_team=t.Id_team
J'ai créé des classes d'entité dans 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
}
J'ai essayé de construire de travail requête select dans de nombreuses façons, mais cela ne fonctionne toujours pas.
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();
Peut-être que quelque chose est incorrect avec les entités?
- Quelle est l'erreur?
- par la façon dont vous avez ajouté.t.Id à la fin de la requête, mais dans votre équipe entité, il est id_team. Pourriez-vous changer de t.id_team
- vous créer incorrectement enity classes. Je pense que vous avez besoin de réécrire et de l'utilisation de ces constructions comme plusieurs-à-plusieurs, un pour un, ou quelque chose comme ça
Vous devez vous connecter pour publier un commentaire.
Les jointures ne peut être utilisé que lorsqu'il existe une association entre les entités. Votre Employé de l'entité ne doit pas avoir un champ nommé
id_team
, de typeint
, associé à une colonne. Il devrait avoir un ManyToOne association avec l'Équipe de l'entité, mappé comme JoinColumn:Ensuite, la requête suivante va fonctionner parfaitement:
Qui va charger tous les employés, à l'exception de ceux qui ne sont pas associées à toute l'équipe.
Il en va de même pour tous les autres champs qui sont une clé étrangère à une autre table mappée comme une entité, bien sûr (
id_boss
,id_profession
).Il est temps pour vous de lire la documentation Hibernate, parce que vous avez raté une partie extrêmement importante de ce qu'il est et comment il fonctionne.
@ManyToOne @JoinColumn(name="id_boss") private Employee boss
Vous pouvez le faire sans avoir à créer un véritable Hibernate mapping. Essayez ceci: