jdbc vs jpa执行
问题描述:
如何在JPA中执行此操作?jdbc vs jpa执行
数据库:
School
------
id int PK
name varchar
state int FK (State(id))
State
-----
id int PK
desc varchar
的Java:
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?
在此先感谢!
答
你应该创建为School
和State
表实体和使用@ManyToOne
关系上School
实体的state
属性来引用的状态。
然后你就可以查询这个样子,在导航从学校到国家的关系:
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类型必须与所有相关属性的构造函数。
谢谢kostja!这是我在想什么,但我想确保在学校需要一个对象属性 - >状态,而不是原始状态。所以JPA将比JDBC慢得多......为什么人们使用它? – leccionesonline 2013-04-24 12:11:36
@leccionesonline - 不客气:) JPA作为一个JDBC抽象,在大多数情况下确实比JDBC慢,但并非全部 - JPA提供适当的缓存,而JDBC不提供适当的缓存。虽然我还没有看到真正的JPA-JDBC基准,所以我不能说慢了多少。我使用JPA的原因是JDBC需要更多的样板代码,这在编写和阅读时都会耗费开发时间。 – kostja 2013-04-24 12:21:55
我转移到JPA的原因是我听说Spring不再支持JDBC,JPA已经成为参考实现 – leccionesonline 2013-04-24 14:39:03