如何使用HQL查询加入hibernate Value对象?

时间:2012-10-29 09:41:10

标签: java hibernate hql

您好我是新写的HQL查询请帮帮我.....  我的Hibernate有三个ValueObjects,即。

@Entity
@Table(name="user")
public class UserVO {

    @Id
    @Column(name="S_ID")
    private String s_id;

    @Column(name="FIRSTNAME")
    private String firstName;
    private String email;
}

CourseVO课程

    @Entity
@Table(name="course")
public class CourseVO
{
    @Id
    @Column(name="S_ID")
    public String s_id;

    @Column(name="NAME")
    public String name;
}

Skillset VO

@Entity
@Table(name="skillset")
public class SkillsetVO 
{
    @Id
    @Column(name="S_ID")
    public String s_id;

    @Column(name="COURSE_ID")//Foreign Key "USER"
    public String course_id;

    @Column(name="USER_ID")//Foreign key "COURSE"
    public String user_id;

    @Column(name="TEACH_EXP")
    public String teach_Exp;
}

现在如何使用HQL查询使用USER表的EMAIL获取FirstName,NAME,TEACH_EXP值的值

1 个答案:

答案 0 :(得分:1)

如果您想在join中使用HQL语法,则必须相应地计算mapping,因为通过映射启用了联接。

@Entity class A { @OneToMany private List<B> bs; }
@Entity class B { @Basic int n; }

启用

select b from A a inner join a.b where a = :id

但是你的映射不可能。另请注意,就效率而言,RDBMs的大部分都会在where a.id = b.id上执行内部联接。

select u.firstName, c.name, s.teach_Exp
from UserVO u, CourseVO c, SkillsetVO s 
where
    u.s_id = s.user_id 
    and c.s_id = s.course_id 
    and u.email = :email

但我认为你必须审查你的关联。因为我认为SkillsetVO.user_id应该是SkillsetVO.User(与UserVO实体的关联,CourseVO的相同关系。)