如何在 Hibernate 中编写这个 SQL 查询?我想使用 Hibernate 创建查询,而不是创建数据库。
SELECT * FROM Employee e INNER JOIN Team t ON e.Id_team=t.Id_team
我在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
}
我尝试以多种方式构建有效的选择查询,但仍然无法正常工作。
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();
也许实体有问题?
最佳答案
只有在实体之间存在关联时才能使用联接。您的 Employee 实体不应有一个名为 id_team
、类型为 int
的字段映射到列。它应该与 Team 实体有一个 ManyToOne 关联,映射为 JoinColumn:
@ManyToOne
@JoinColumn(name="ID_TEAM")
private Team team;
然后,以下查询将完美运行:
select e from Employee e inner join e.team
这将加载所有员工,除了那些不与任何团队关联的员工。
所有其他字段也是如此,这些字段是映射为实体的其他表的外键,当然(id_boss
、id_profession
)。
现在是您阅读 Hibernate 文档的时候了,因为您错过了关于它是什么以及它是如何工作的一个极其重要的部分。
关于java - HQL Hibernate INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379766/