0

刚开始探索 SPRING 和 JPA。所以请多多包涵。

假设我有两张桌子

员工表附件表
--------------------------- ------------------------ --------------------
身份证 | 名字 | 姓氏 | 身份证 | 参考类型 | REF_ID | 文件
--------------------------- ------------------------ --------------------
1 | EMP1 | EMPL1 | 1 | “员工” | 1 | EMPL1_FIle1.jpg
--------------------------- ------------------------ --------------------
2 | EMP2 | EMPL2 | 2 | “员工” | 1 | EMPL1_FIle2.jpg
                                ------------------------------------------
                                3 | “员工” | 2 | EMPL2_FIle1.jpg

** 为了保持附件的灵活性(这样我可以在需要附件的其他地方重复使用相同的表/类),我使用REF_TYPEREF_ID的组合来定位引用对象。

最好的方法是什么?
- 甚至应该这样做吗?有没有更好的 DB/Class 设计方法?

- 我应该使用@JoinColumns 吗?(但我不确定这将如何工作......)

- 或者加载附件的逻辑是否应该进入 Service/DAO 类,其中findByRefTypeAndRefId(String refType, long refId)函数回退到 JPARepository @Autowired接口?

4

2 回答 2

0

您将无法在 JPA 中映射这种关系。

OneToMany 或 ManyToOne 映射(从 Employee 到 Attachment 或 Attachment 到 Employee)基于 @ID。您的员工有简单的一列 ID,但在您的附件中连接取决于两列的值。

于 2015-04-15T14:40:07.450 回答
0

假设您的附件表将包含来自其他表的记录,包括员工,例如公司等。

首先,您必须编写一个 JPA 查询,@JoinColumns 不起作用,因为您不应该将一个列映射映射到两个表作为外主关系。

加载任何数据库查询的逻辑应始终转到 DAO 类。你应该遵循服务和 DAO 模式来简化代码。

解决方案 1:如果您想采用当前方法,请使用 JPA 查询 + 您的列类型 REF_TYPE 作为 CHAR(1),例如 E、C 等。

解决方案2:为附件(用户、公司等)制作单独的表,删除 REF_TYPE 列。在 id 列之间创建一个外部主关系并使用连接。这将使您的代码看起来也很整洁。

希望这可以帮助。

于 2015-04-16T10:55:04.157 回答