gpt4 book ai didi

java - JPA:仅使用几个属性进行获取

转载 作者:行者123 更新时间:2023-11-29 21:15:06 26 4
gpt4 key购买 nike

如果我从数据库中获取记录,例如使用 SELECT 查询,并且只需要一些属性(列),我会执行以下操作:

SELECT name FROM TENANT WHERE id=1;

问题 1:我们如何在 JPA 中做同样的事情?

这就是现在获取所有属性的方法:

@PersistenceContext
javax.persistence.EntityManager em;
...
em.find(Tenant, 1);

我们怎样才能只获取name字段WHEREtenant.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;

...
}

如何仅获取TenantDepartmentname字段WHEREtenant.id=1?`

最佳答案

这可以通过 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 包裹起来.

关于java - JPA:仅使用几个属性进行获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36013739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com