我必须与Hibernate合作,但我不确定如何解决此问题,我有2个具有1..n关系的表,如下所示:
-------
TABLE_A
-------
col_b(pk)
col_c(pk)
[其他领域]
-------
TABLE_B
-------
col_a(pk)
col_b(pk)(fk TABLE_A.col_b)
col_c(fk TABLE_A.col_c)
[其他领域]
如何使用Hibernate进行管理?
我不知道如何声明将包含主键一部分的外键。
我的数据库架构是从Hibernate模型生成的。
我找到了解决此问题的两种方法。
第一个是一种解决方法,没有第二个那么整洁。
将B
实体的主键定义为包含col_a
,col_b
和的复合键,col_c
首先将假定为主键的内容定义为唯一约束。缺点是,从col_c
概念上讲,该列实际上并不是主键的一部分。
@Entity
class A {
@Id
private int b;
@Id
private int c;
}
@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "a", "b" }) })
class B {
@Id
private int a;
@Id
@ManyToOne(optional = false)
@JoinColumns(value = {
@JoinColumn(name = "b", referencedColumnName = "b"),
@JoinColumn(name = "c", referencedColumnName = "c") })
private A entityA;
}
第二个使用@EmbeddedId
和@MapsId
注释,并且恰好做了我一开始想要做的事情。
@Entity
class A {
@Id
private int b;
@Id
private int c;
}
@Embeddable
class BKey {
private int a;
private int b;
}
@Entity
class B {
@EmbeddedId
private BKey primaryKey;
@MapsId("b")
@ManyToOne(optional = false)
@JoinColumns(value = {
@JoinColumn(name = "b", referencedColumnName = "b"),
@JoinColumn(name = "c", referencedColumnName = "c") })
private A entityA;
}
问题内容: 我使用Hibernate制作了一个示例应用程序。我的要求是表上没有主键。我只需要从应用程序中选择查询。我知道应该有一个主键,但是我所引用的表没有它。 它有大约5万条记录。因此,修改表以添加ID列将看不到可行的选项。 有可能吗 问题答案: Hibernate 要求 实体表具有主键。故事结局。 在谈论数据库时,5万条记录根本就不多。 我的建议:在表中添加一个自动增量整数PK列。您会对它的速
问题内容: 一个表的外键是否可以成为另一个表的组合主键的一部分?例如,如果我有两个表,一个包含有关不同用户的所有活动项目的信息,另一个包含有关项目正在使用哪种设备的信息: 项目表: (两者都不是唯一的) 设备表: (两者都不是唯一的) 现在可以将设备表中的ProjectId设置为项目表中的外键吗?尝试时,我收到一条错误消息,指出“项目表”中的列与现有的主键或唯一约束不匹配? 问题答案: 不。 创建
问题内容: 我得到了这个hibernate映射: 这是一个简单的复合键映射,具有与表productCoverage的关系以及与productterm的复合键。 现在问题出在我的搜索功能中: 这应该让我在“ id”(这是主键CoverageTermPK)上创建一个子条件,并对其添加限制,但是当我运行它时,我得到了错误消息: 这感觉很奇怪,难道不应该在那里得到CoverageTermPK吗?如果我尝试
问题内容: 我有一个Catagory表,具有复合主键和外键。我的表结构就像 我想要像这样的Catagory类的ORM映射 现在如何注释 问题答案: 或而不是的版本(已通过Eclipselink 2.2.1测试):
我在使用复合主键创建实体时遇到问题,该键也是外键。这是我的表和关系表原理图。当我想创建新闻实体时,我收到了带有null creatingnews的错误消息。新闻翻译有复合主键,外键引用到新闻表。 这是我的代码: 新闻聚合 新闻翻译 标签 新闻语言ID 在NewsFactory中,我希望使用NewsTranslation创建NewsAggregate,但有错误消息NullPointer。 新闻工厂
我有以下表格,如何将它们映射到JPA实体: 事件表与会议表具有一对多的关系。我如何在JPA中映射这种双向关系?