gpt4 book ai didi

java - 您可以使用标准 API 控制 Hibernate 中的获取行为吗?

转载 作者:行者123 更新时间:2023-12-02 04:07:22 25 4
gpt4 key购买 nike

我知道您可以使用 @javax.persistence.FetchType 控制获取行为,但是您可以从 JPA Criteria 查询中以编程方式控制获取吗?基本上我可以从查询中得知应用程序的哪一部分可能正在调用以及(最有可能)需要模型的哪一部分.

我在任何教程中都找不到答案,但这些老问题:

<小时/>

tl;dr:您可以在 JPA Criteria 查询中以编程方式控制获取吗?

最佳答案

您可以为此使用实体图(适用于 JPQL 和 Criteria API)。

示例:

@Entity
@NamedEntityGraph(name = "User.withRoles", attributeNodes = {
@NamedAttributeNode("roles") // fetch "roles" eager
})
@NamedQuery(name = "User.byName", query = "SELECT u FROM User u WHERE u.name = :name")
public class User {
/* ... */

@Column(updatable = false)
private String name;

@ManyToMany // fetch lazy by default
@JoinTable(name = "user_role", /* ... */)
private Set<Role> roles;
}

public User getUser(String name, boolean withRoles) {
TypedQuery<User> query = entityManager.createNamedQuery("User.byName", User.class);
if (withRoles) {
EntityGraph<User> loadGraph = (EntityGraph<User>) entityManager.createEntityGraph("User.withRoles");
query.setHint("javax.persistence.loadgraph", loadGraph);
}

try {
return query.setParameter("name", name).getSingleResult();
} catch (NoResultException ex) {
return null;
}
}

类似地,您也可以使用提取图来排除提取的字段。

关于java - 您可以使用标准 API 控制 Hibernate 中的获取行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34137412/

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