【发布时间】:2018-05-17 17:18:25
【问题描述】:
我希望以单向方式与连接表建立一对一的关联。 -
表格:
- A(A_id、D_id、A_Data)
- B (A_id, C_id) // 连接表只包含 A 和 C 之间的关系
-
C (C_id, C_Data)
Class A { . . @OneToOne(cascade = CascadeType.ALL) @JoinTable(name = "B", joinColumns = @JoinColumn(name = "A_id", referencedColumnName = "A_id"), inverseJoinColumns = @JoinColumn(name = "C_id", referencedColumnName = "C_id")) private C c; }
我在 jpa 2.0 中使用休眠。 实体 D 在模型中并不重要,因此被忽略。 我只想读取数据,因此不应该担心插入/更新/删除用例,但在这种情况下也可以建议最佳实践。
此设置不起作用。有人可以建议如何以正确的方式做到这一点吗?
它给出了以下异常
org.hibernate.MappingException: Unable to find column with logical name: A_id in org.hibernate.mapping.Table(A) and its related supertables and secondary tables
【问题讨论】:
-
您能详细说明什么不适合您吗?任何错误消息都会有所帮助。
-
为什么需要这种关系?如果你想一对一在 A 或 C 中添加一个带有 @OneToOne 的额外字段
-
数据库存在很久了,我不想改变架构。
-
@JoinTable(name = "B", joinColumns = @JoinColumn(name = "A_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "C_id", referencedColumnName = "id")在引用列名时,它应该与实体中存在的字段相关 -
看起来不是真的。 referencedColumnName 的值应始终是列名。
标签: java hibernate jpa hibernate-mapping