我正在使用旧版数据库。
我正在使用JPA 2.x
我有:
- 包含有PK +自然业务密钥的域对象的BUSINESS_ORDER表
- 一个表BUSINESS_LEDGER,其中包含带有PK +复合自然业务密钥的域对象
- 包含两个先前表之间的映射的表INTEGRATION:PK + FK_BUSINESS_ORDER + FK_BUSINESS_LEDGER
在我的JPA实体中:
- 对于BUSINESS_ORDER实体,我想隐藏ID,以便公开Business Key。公开业务而不是基础架构密钥。
- 对于BUSINESS_LEDGER实体,也是一样。封装ID并公开一个Buiness Key
- 对于集成实体,我想使用业务密钥而不是ID。我真的不想映射关系。仅引用,因为从业务角度来看这没有意义。仅保留引用(业务密钥)是相关且有用的。集成实体用于查询和保留链接(如联接表:D)
我的问题是:如何设计INTEGRATION实体?我实例化一个新的Integration实体,设置业务密钥(订单代码和分类帐代码)并保存。在保存过程中,代码会被转换为PK和voila。加载INTEGRATION实体时,PK将转换为其代码。
- 如果我不使用@ManyToOne注释;
- 如果我使用@Converter,则需要将业务密钥转换为PK,并且每次在Converter(ewwww)中都需要进行查询。似乎有点矫kill过正或复杂。
- 如果我使用@SecondaryTable(此注释不是默认用例)。我真的不知道如何实现
更新1:
例如,答案可能是将@Embeddable与@OneToOne一起用于ORDER实体,或者在可嵌入对象内部部分使用Order实体(仅ID /代码)。