将外连接SQL查询转换为EJB实体bean

时间:2009-11-14 13:37:50

标签: java jpa ejb-3.0 ejb jpql

我是EJB的新手,并试图将SQL概念转换为EJB实体bean。

假设我有两个表:PEOPLE(id,name),CONTACT(pid,phone_number)。如果我想获得所有人的列表,无论他们是否有电话号码,在我的EJB会话bean中,我只需通过JDBC发出SQL查询,例如:

SELECT PEOPLE.name, CONTACT.phone_number 
FROM PEOPLE 
LEFT JOIN CONTACT ON PEOPLE.id = CONTACT.pid

我现在想使用EJB实体bean,而不是使用SQL / JDBC。所以我为我的表创建了相应的EJB3实体bean类。

所以我现在可以访问会话bean中的两个实体类,我不再希望通过会话bean中的SQL / JDBC直接访问我的数据库表。我只想使用我的实体bean和JPA的功能。什么是正确的EJB设计,以便在我的会话bean中,我得到与我的SQL查询相同的结果?

我不清楚如何使用EJB实体bean类生成与我的SQL外连接查询相同的结果。帮助

1 个答案:

答案 0 :(得分:2)

首先,创建两个JPA实体,类似于People

@Entity
@Table( name="PEOPLE" )
public class People {

    @Id @Column
    private Long id;

    @Column
    private String name;

    @OneToOne
    @JoinColumn( name="pid" )
    private Contact contact;

    // getters and setters
}

对于Contact

@Entity
@Table( name="CONTACT" )
public class Contact {

    @Id @Column
    private Long pid;

    @Column
    private String phoneNumber;

    // getters and setters
}

然后,使用JPQL生成OUTER JOIN查询:

SELECT p FROM People p LEFT JOIN p.contact c