通过外键联接多个表

时间:2020-08-17 14:35:20

标签: kotlin jpa spring-data-jpa

我需要使用JPA将多个​​表连接到一个对象中。每个辅助表都与主表中单独的外键关联。

我尝试过的简化示例:

@Entity
@Table(name = "t_a")
@SecondaryTables(
        SecondaryTable(name = "t_b", pkJoinColumns = [PrimaryKeyJoinColumn(name = "b_id", referencedColumnName = "b_id")]),
        SecondaryTable(name = "t_c", pkJoinColumns = [PrimaryKeyJoinColumn(name = "c_id", referencedColumnName = "c_id")])
)
class A{
    @Id
    @Column(name = "a_id")
    var aId: Int? = null

    @Column(name = "b_id")
    var bId: Int? = null

    @Column(name = "c_id")
    var cId: Int? = null

    @Column(name = "name")
    var name: String? = null

    @Column(name = "name", table = "t_b")
    var bName: String? = null

    @Column(name = "name", table = "t_c")
    var cName: String? = null

    @Column(name = "value", table = "t_c")
    var cValue: Int? = null
}

具有更多的字段和表,尝试使用@Formula或多个@Entity类充其量是混乱且效率低下的。

很明显,这种方法以org.hibernate.AnnotationException: SecondaryTable JoinColumn cannot reference a non primary key失败。

为便于记录,我为简化示例尝试复制的SQL是:

SELECT t_a.name, t_b.name, t_c.name, t_c.value FROM t_a
    INNER JOIN t_b ON t_a.b_id = t_b.b_id
    INNER JOIN t_c ON t_a.c_id = t_c.c_id
    WHERE t_a.a_id = ?;

有什么干净的方法可以做到这一点吗?

0 个答案:

没有答案