【问题标题】:How to connect three tables using only one entity/class in Spring & Hibernate如何在 Spring & Hibernate 中仅使用一个实体/类连接三个表
【发布时间】:2019-07-05 10:15:41
【问题描述】:

我只有一个实体,即学校 - 一个班级(示例)。我在那里有 7 个字段,这些字段来自 3 个不同的表。例如,第一个表称为 Classroom,第二个是 Teachers,第三个是 Subject。教师表和学科表通过 pk:subject_id 连接,而教室表和教师表通过教室 ID 连接。

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

【问题讨论】:

    标签: spring hibernate model-view-controller


    【解决方案1】:

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

    创建模型类(如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。

    【讨论】:

    • 如果我们被告知要自己实现,我可以使用它。这很酷而且很有帮助。不过,我不知道为什么他们只给我们三张桌子一节课……
    【解决方案2】:
    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);
    }
    

    【讨论】:

    • ??我的答案的副本:)
    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2019-02-05
    • 2023-04-09
    • 2017-03-13
    • 2016-07-04
    • 1970-01-01
    相关资源
    最近更新 更多