Spring Hibernate-如何在没有主键/外键关系的情况下从另一个表中获取单个值?

Spring Hibernate-如何在没有主键/外键关系的情况下从另一个表中获取单个值?,spring,hibernate,spring-boot,spring-data-jpa,Spring,Hibernate,Spring Boot,Spring Data Jpa,我有两张桌子(员工和部门) 员工(ID、员工姓名、部门ID、员工地址)-->ID主键 部门(ID、部门名称、地址)-->ID主键 注:< /强>考虑这2个表之间的主键/外键关系< /P> 现在根据Employee中的dept id,我需要从Department中获取其对应的dept name并将其显示在Employee中。 员工(ID、员工姓名、部门ID(显示部门名称而不是部门ID,通过传递部门ID查询部门表以获取部门名称)、员工地址) 实现这一目标的所有可能方法是什么 问候 Raj我认为至少

我有两张桌子(员工和部门)

员工(ID、员工姓名、部门ID、员工地址)-->ID主键

部门(ID、部门名称、地址)-->ID主键

<强>注:< /强>考虑这2个表之间的主键/外键关系< /P> 现在根据Employee中的dept id,我需要从Department中获取其对应的dept name并将其显示在Employee中。

员工(ID、员工姓名、部门ID(显示部门名称而不是部门ID,通过传递部门ID查询部门表以获取部门名称)、员工地址)

实现这一目标的所有可能方法是什么

问候
Raj

我认为至少有三种可能的解决方案:

  • 为此创建一个“普通”SQL查询,连接可以在没有PK/FK关系的情况下完美完成
  • 执行两个SQL查询:一个查询获取员工,然后提取ID,然后第二个查询获取部门ID
  • 更改您的JPA实体以包括关系,就像您通常使用
    @OneToMany
    关系一样,这样您就可以像往常一样将员工加载到其部门。与1相同,连接(无论是由您还是由JPA提供商完成)不需要PK/FK关系

  • 虽然1可以使用普通SQL完成,但2可以使用实体管理器完成,而无需编写“普通”SQL。3显然是最简单的解决方案。

    您可以在存储库中
    @Query
    并使用JOIN编写JPA查询

    示例查询:

    @Query( value = "select new map(employee.name as empName, employee.id as id, department.id as depId, department.name as depName) from Employee employee INNER JOIN Department department ON employee.depId = department.id where employee.id = :id" )
    public Map<String,Object> getEmployeeById(long id);
    
    @Query(value=“从employee-employee-employee-employee内部选择新映射(employee.name作为empName,employee.id作为id,department.id作为depId,department.name作为depName)在employee.depId=department.id上加入部门,其中employee.id=:id”)
    公共地图getEmployeeById(长id);
    
    这些表上没有外键的原因是什么?为了便于理解,我提到了员工和部门。在实际场景中,我们只在主表中保存ID,并从查找表中获取其相应的值。此查找表是常见的。多个表从传递id的表中获取值。请更新并澄清您的问题,因为这似乎不是JPA问题,而是JSON序列化问题。它不是外键约束,并不意味着您无法将其映射为
    @manytone
    。谢谢。我只需要一个值。为了便于理解,我提到了员工和部门。在实际情况中,我确实有一个超过20列的表,在其中的10列中,我们只保存ID。它将从多个查找表中获取相应的值。这些查找表是常见的。多个表通过id从此表获取值。这不是使用普通SQL查询的有效方法吗?这不会影响性能吗。您可以分享一些例子吗?是什么阻止您编写SQL查询,将主表与每个ID的多个查找表连接起来?这与您编写PK/FK支持的联接相同。如果使用SQL查询,我可以获取只读数据。希望我不能更新回数据库。我想获取所有这些数据以显示在UI中&而且当用户单击save按钮时,这些数据必须是可更新的。这就是为什么有兴趣使用实体而不是使用本机SQL来实现这一点。我不熟悉这项技术。请在这方面帮助我。正如我所写的-JPA实体根本不需要FK/PK关系来将您的数据库结构建模为实体。是的,那么您为什么不简单地更改JSON映射器呢?