我是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外连接查询相同的结果。帮助
答案 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