当前位置: 首页 > 知识库问答 >
问题:

您能使用标准API控制Hibernate中的获取行为吗?

郎言
2023-03-14
    null

共有1个答案

端木骞尧
2023-03-14

您可以为此使用实体图(它与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;
    }
}

同样,您也可以使用提取图来排除要提取的字段。

 类似资料:
  • 我想使用hibernate标准删除表中的所有记录,比如 我得到了以下很多帮助 是否有任何方法可以使用Criteria类或任何其他我可以使用的类来截断?请告诉我

  • Dao类看起来像:- 和app.java类: 包结构类似于:[1]:https://i.stack.imgur.com/sbz24.jpg application.properties文件内容:-

  • 这是我目前拥有的:

  • 我有ORACLE DB和2个表。我需要从表1内部连接表2中选择行,并按ORACLE RowID列排序。要选择,我使用条件查询。要添加我使用的order by语句 在映射中,RowId看起来像 但是hibernate生成错误的sql查询,如 Hibernate从查询中删除别名“this”。因为ORACLE中的所有表都有ROWID列,所以我们有Oracle错误ORA-00918 如何按hibernat

  • 问题内容: 我想从命令行读取标准输入,但是在提示我输入之前,我的尝试以结束程序退出而告终。我正在寻找C#中的Console.ReadLine()等效项。 这是我目前拥有的: 问题答案: 我不确定块有什么问题 因为它可以在我的机器上使用。但是,对于下一个块,您需要一个指针,该指针指向要将输入分配给它们的变量。尝试替换为。不要使用,因为它解析内存中已有的字符串,而不是解析来自stdin的字符串。如果您

  • 我正在将我们的DAO从使用Hibernate Criteria API迁移到JPA Criteria API。我有一个包含多个的类: 在查询中,我使用的是JoinType。左键以消除默认生成的交叉连接: 我得到了正确的结果,所有的A和B记录都得到了正确的检索。然而,在迁移之后,我遇到了一个问题:尽管在生成的查询中使用了左外连接,但所有的记录都是逐个检索的。以前(使用Hibernate Criter