jdbc vs jpa实现

时间:2013-04-24 11:28:29

标签: jdbc jpa-2.0

我如何在JPA中执行此操作?

数据库:

School
------
id int PK
name varchar
state int FK (State(id))

State
-----
id int PK
desc varchar

爪哇:

SchoolShow
----------
int id;
String name;
int iState;
String sState;

代码:

select sc.name, st.desc from school sc, state st where st.id=sc.state and sc.id=?

while(rs.hasNext()){
    SchoolShow ss=new SchoolShow();
    ss.setName(rs.getString("name"));
    ss.setSState(rs.getString("desc"));
}

¿我可以使用不同表中属性的@Entity吗?

提前感谢!!

1 个答案:

答案 0 :(得分:1)

您应该为SchoolState表创建实体,并在@ManyToOne实体的state属性上使用School关系来引用该状态

然后你可以像这样查询,浏览从学校到州的关系:

List result = em.createQuery("SELECT sc.name, sc.state.desc FROM School sc").getResultList(); 

请注意,列表中的每个元素都是Object[]。您需要迭代它们并将值分配给DTO。

您还可以将JPA构造函数表达式用于类型安全且不那么混乱:

List<DTO> dtos = em.createQuery("SELECT NEW com.example.DTO( sc.name, sc.state.desc) FROM School sc").getResultList();

DTO类型必须具有包含所有相关属性的构造函数。