JPA:仅使用少量属性进行提取

时间:2016-03-15 14:12:03

标签: java mysql sql jpa

如果我从数据库中提取记录,例如使用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;

    ...
}

如何仅提取nameTenant Department的{​​{1}}个字段?“

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包装。