Java 需要建议-SPRING JPA专栏

Java 需要建议-SPRING JPA专栏,java,spring,hibernate,jpa,joincolumn,Java,Spring,Hibernate,Jpa,Joincolumn,刚刚开始探索SPRING和JPA。所以请容忍我。 假设我有两张桌子 员工表附件表 --------------------------- ------------------------------------------- ID | FIRSTNAME | LASTNAME | ID | REF|u TYPE | REF|u ID |文件 --------------------------- ----------------------------------------

刚刚开始探索SPRING和JPA。所以请容忍我。

假设我有两张桌子

员工表附件表 --------------------------- ------------------------------------------- ID | FIRSTNAME | LASTNAME | ID | REF|u TYPE | REF|u ID |文件 --------------------------- ------------------------------------------- 1 | EMP1 | EMP1 | EMP1 | 1 | EMPLOYEE | EMPLOYEE | 1 | employ1 | u FIle1.jpg --------------------------- ------------------------------------------- 2 | EMP2 | EMP2 | 2 | EMPLOYEE | 1 | employ1 | u FIle2.jpg ------------------------------------------- 3 |“雇员”| 2 |雇员2|u文件1.jpg **为了保持附件的灵活性(以便我可以在需要附件的其他地方重用相同的表/类),我使用REF_TYPE和REF_ID的组合来定位引用对象。

最好的方法是什么?
-你应该这么做吗?有更好的DB/类设计方法吗?

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


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

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


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

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

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

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

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

解决方案2: 为附件(用户、公司等)制作单独的表格,删除REF_类型列。在id列和use join之间创建外部主关系。 这将使您的代码看起来整洁

希望这有帮助

EMPLOYEE TABLE ATTACHMENT TABLE --------------------------- ------------------------------------------- ID | FIRSTNAME | LASTNAME | ID | REF_TYPE | REF_ID | FILE --------------------------- ------------------------------------------- 1 | EMP1 | EMPL1 | 1 | "EMPLOYEE" | 1 | EMPL1_FIle1.jpg --------------------------- ------------------------------------------- 2 | EMP2 | EMPL2 | 2 | "EMPLOYEE" | 1 | EMPL1_FIle2.jpg ------------------------------------------- 3 | "EMPLOYEE" | 2 | EMPL2_FIle1.jpg