java - HQL Hibernate INNER JOIN

标签 java hibernate hql

如何在 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_bossid_profession)。

现在是您阅读 Hibernate 文档的时候了,因为您错过了关于它是什么以及它是如何工作的一个极其重要的部分。

关于java - HQL Hibernate INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379766/

相关文章:

java - 带有 XML 或 JSON 的 JAX-RS (Jersey) 自定义异常

java - Spring3 JPA (Hibernate4) 不持久

java - 我尝试使用 hibernate 连接到 MySql 工作台

java - @OneToMany 导致集合不与任何 session 关联

hibernate - HQL按属性顺序指定顺序?

java - 从列表<map<String,String>>获取不区分大小写的键

java - 如何在java中使用高阶unicode字符?

java - 什么是标记接口(interface)?

Hibernate Criteria join 查询一对多

mysql - 如何将一天添加到sql日期?