【问题标题】:Advice wanted - SPRING JPA JoinColumns需要的建议 - SPRING JPA JoinColumns
【发布时间】:2015-04-15 12:50:43
【问题描述】:

刚开始探索 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

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

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

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

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

【问题讨论】:

    标签: java spring hibernate jpa joincolumn


    【解决方案1】:

    您将无法在 JPA 中映射此类关系。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-10-27
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多