java - 如何使用 Hibernate 获取关联的实体

标签 java spring hibernate jpa orm

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

这是我的 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;
}

最佳答案

根据您的查询,Profession 表有一个 uid 列,它可能是 Users 表的 FK,我认为 Users表格应该有一个专业的 FK。

因此 Users 表将与 Profession 建立多对一关联:

@ManyToOne
private Profession profession;

Profession 可以关联所有具有该特定职业的用户,因此在 Profession 实体中,您具有此关联的反面:

@OneToMany(mappedBy = "profession")
private List<Users> users = new ArrayList<>();

现在要让所有用户都拥有某种职业,您可以像这样运行一个简单的查询:

List<Users> users = (ist<Users>) session.createQuery(
    "select u " +
    "from Profession p " +
    "join fetch p.users u " +
    "where p.id = :id")
.setParameter("id", proffesionId)
.list();

关于java - 如何使用 Hibernate 获取关联的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310852/

相关文章:

java - 如何使用 Hibernate 将 ORM 转换为其子类?

Java 反射 : Find fields of a subclass

java - DynamoDB JsonMarshaller 无法反序列化对象列表

java - 关于使用 mock stripe 进行端到端测试

java - 通过 associationPath 获取条件

mysql - Hibernate 事件监听器未捕获事件

java - Java 中的基本 Hangman 游戏(主要涉及字符串操作)

java - 用于sql分析的正则表达式

java - 无法访问 spring boot 执行器的/beans

java - 带有 Date 类型的 spring-cloud-feign Client 和 @RequestParam