2012-10-29 55 views
1

嗨,我是新来编写HQL查询请帮我.....我的Hibernate有三个ValueObjects即。如何使用HQL查询加入hibernate值对象?

@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; 
} 

技能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查询

回答

1

如果获得使用USER表的EMAIL姓,名,TEACH_EXP值的值你想在中使用join语法,因为映射启用了连接,所以您必须相应地编制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的关联)。

+0

Thankyou ..正确的,我使用一对多关联CourseVO和UserVO类。但是您的查询没有连接为什么HQL不支持连接?或者使用'和'运算符是简单而正确的方式? –