我需要使用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 = ?;
有什么干净的方法可以做到这一点吗?