如何使用Hibernate获取关联实体

jav*_*per 7 java orm spring hibernate jpa

我正在使用Spring rest和Hibernate开发一个应用程序,我想从数据库中获取嵌套记录,就像我正在获取Profession一个User,现在我想获取UsersProfession我之前获取的相关联.

这是我的Dao课程

@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Profession> getProfessionById(long id) throws Exception {
    session = sessionFactory.openSession();
    Criteria cr = session.createCriteria(Profession.class);
    cr.add(Restrictions.eq("uid", id));
    List results = cr.list();
    tx = session.getTransaction();
    session.beginTransaction();
    tx.commit();
    return results;
}
Run Code Online (Sandbox Code Playgroud)

ozg*_*gur 2

获取策略

\n\n

有四种抓取策略

\n\n
    \n
  1. fetch-\xe2\x80\x9cjoin\xe2\x80\x9d = 禁用延迟加载,始终加载所有集合和实体。
  2. \n
  3. fetch-\xe2\x80\x9cselect\xe2\x80\x9d(默认)= 延迟加载所有集合和实体。
  4. \n
  5. batch-size=\xe2\x80\x9dN\xe2\x80\x9d = 获取最多 \xe2\x80\x98N\xe2\x80\x99 个集合或实体,不记录
  6. \n
  7. fetch-\xe2\x80\x9csubselect\xe2\x80\x9d = 将其集合分组到子选择语句中。
  8. \n
\n\n

详细解释可以查看Hibernate文档。

\n\n

FetchType.LAZY按需提供

\n\n

FetchType.EAGER是立即的

\n\n
@SuppressWarnings({ "unchecked", "rawtypes" })\npublic List<User> getProfessionById(long id) throws Exception {\n   session = sessionFactory.openSession();\n       Criteria cr = session.createCriteria(Profession.class, "pro")\n                             .setFetchMode("user", FetchMode.JOIN);\n        cr.add( Restrictions.eq("uid", id));\n        Profession pro = cr.uniqueResult();\n        tx = session.getTransaction();\n        session.beginTransaction();\n        tx.commit();\n    return pro.getUsers();\n}  \n
Run Code Online (Sandbox Code Playgroud)\n