1

我如何在 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 吗?

提前致谢!!

4

1 回答 1

1

School您应该为和State表创建实体,并使用实体属性上的@ManyToOne关系来引用状态。stateSchool

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

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 类型必须有一个具有所有相关属性的构造函数。

于 2013-04-24T11:37:40.460 回答