如何在Spring&Hibernate中仅使用一个实体/类连接三个表

时间:2019-07-05 10:15:41

标签: spring hibernate model-view-controller

我只有一个实体,即School-一个班级(示例)。我在那里有7个字段,这些字段来自3个不同的表。例如,第一个表称为“课堂”,第二个表为“教师”,第三个表为“主题”。教师和科目表通过pk:subject_id连接,而教室表和教师表则通过教室ID连接。

我尝试了辅助表,但是看起来不正确。如何在单个实体内连接这些表并在DAO IMPLementation中编写查询

2 个答案:

答案 0 :(得分:2)

您应该对每个表使用实体。 如果需要选择与数据库无关的Model类,可以使用spring-data-jpa轻松完成。

创建Model类(例如School)后,只需使用以下示例进行查询:

class ProgrammerNameAndCity{
   fields...
   allArgConstructor...
}

public interface ProgrammerRepository extends JpaRepository<Programmer,Long> {
    @Query(" select new com.zlrx.database.pojo.ProgrammerNameAndCity(p.name,p.address.city) " +
                "from Programmer p where  p.idNumber=?1")
    ProgrammerNameAndCity findNameAndCityByIdNumber(String idNumber);
}

在此示例中,程序员具有一个地址字段(OneToOne),但是您可以创建任何类型的查询,这里重要的是模型的构造函数调用。

如果要使用普通sql或impl类而不是接口进行查询,则也可以使用Spring的RowMapper。

答案 1 :(得分:-1)

class ProgrammerNameAndCity{
    fields...
    allArgConstructor...
}

public interface ProgrammerRepository extends JpaRepository<Programmer,Long> {
    @Query(" select new com.zlrx.database.pojo.ProgrammerNameAndCity(p.name,p.address.city) "
        + "from Programmer p where  p.idNumber=?1")
    ProgrammerNameAndCity findNameAndCityByIdNumber(String idNumber);
}