如果我从数据库中提取记录,例如使用SELECT
查询,并且只需要一些属性(列),我会做类似的事情:
SELECT name FROM TENANT WHERE id=1;
问题1:我们如何在JPA中做同样的事情?
现在这是如何完成获取所有属性的:
@PersistenceContext
javax.persistence.EntityManager em;
...
em.find(Tenant, 1);
我们如何才能仅提取name
字段WHERE tenant.id=1
?
问题2:如果有子类,如何才能获取少数几个属性?
public class Tenant implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "tenant")
private List<Department> departments;
...
}
public class Department implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
//bi-directional many-to-one association to Tenant
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="TenantId", insertable=false, updatable=false)
private Tenant tenant;
...
}
如何仅提取name
和Tenant
Department
的{{1}}个字段?“
答案 0 :(得分:0)
这可以通过JPQL(又名HQL)轻松完成:
第一种情况:
List<String> names = em.createQuery("select t.name from Tenant t where t.id = :id")
.setParameter("id", 1)
.getResultList();
第二种情况相同,但查询将是:
"select d.name from Department d where d.tenant.id = :id"
getResultList()
可以替换为getSingleResult()
,但如果此类元素不存在则会抛出异常,因此必须使用try-catch包装。