我有大约 10 个类,每个类都有复合键,由 2-4 个值组成。其中 1 个类是主要类(我们称其为“中心”),并且与其他类以一对一或一对多的方式相关。
考虑在 JPA 中描述这一点的正确方法,我认为我需要使用 @Embedded / @PrimaryKey 注释来描述所有主键。
问题#1: 我担心的是——这是否意味着在数据库级别上,每个表中引用“中心”的附加列数等于“中心”PK 中的列数?
如果是,是否可以通过使用一些人为的唯一键进行引用来避免它?你能告诉我在这种情况下如何描述真实的PK和人工的PK吗?
注意:我想保留真正的 PK 而不仅仅是像 PK 那样使用唯一 id 的原因是 - 我的应用程序具有一些来自外部数据源的数据加载功能,有时它们可能会返回我已经在本地数据库中拥有的记录。如果将唯一 ID 用作 PK - 对于新记录,我将无法进行数据更新,因为唯一 ID 不适用于刚刚下载的记录。同时这是应用程序的正常情况,它只需要更新插入新记录,这取决于真正的复合主键是否匹配。
问题 #2: 所有 10 个类都有公共字段“日期”,我在一个抽象类中对其进行了描述,每个类都扩展了该字段。“日期”本身从来都不是键,但它始终是每个类的组合键的一部分。每个类的复合键都不同。为了能够将此字段用作 PK 的一部分,我应该在每个类中描述它还是有什么方法可以按原样使用它?我尝试了@Embedded 和@PrimaryKey 注释,总是得到一个错误,即eclipselink 找不到抽象类中描述的字段。
先感谢您!
PS。我正在使用最新版本的 eclipselink & H2 数据库。