三张表A、B、C,主键分别是A_ID、B_ID、C_ID,A表里面有一个字段TYPE(String)跟一个字段CONNECT_ID(Long),TYPE字段的值有两种,分别是CONNECT_B跟CONNECT_C。如果TYPE为CONNECT_B,那么A表中的字段CONNECT_ID就对应B表中的B_ID。
如果TYPE为CONNECT_C,那么A表中的字段CONNECT_ID就对应C表中的C_ID。实际表中B_ID跟C_ID是一样的,下面是我在A实体类中的注解,请大家指教下,B跟C实体类中用注解什么吗?@Column(name = "CONNECT_ID")
private Long connectId;//@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CONNECT_ID", nullable = true,referencedColumnName="B_ID")
private B b;@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CONNECT_ID", nullable = true,referencedColumnName="C_ID")
private C c;
在线等。求解

解决方案 »

  1.   

    你这个type字段只能定义为一个单纯的数据,不要和B和C关联了。然后通过这个字段的值去B和C查询,你说的这样通过对象去关联没法实现。
      

  2.   

    还有一种方法就是定义两列A,B分别和B表和C表关联,然后通过type字段的类型去获取A或B对象。
      

  3.   


    嗯,我也想过这样,不过项目里有个地方已经这样用了,只是有一点不一样,很好,现在是搞定了,具体问题怎么说呢,IDEA缓存,还有TOMCAT可能有问题。。反正换了个TOMCAT然后取消了IDEA的TOMCAT war就搞定了
      

  4.   


    那我来顶一下吧。其实我觉得你不应该在A表的一个字段同时加B和C的ID。你还不如在B和C表里面加A的ID。然后关联。
    这样就可以直接在A对象中引入B和C了。
      

  5.   

    这样的效果是不一样的,这样的话,BC两表都要有大变动了项目里关于这俩表的已经完成了,现在新增功能只有在中间表中动,而且,这样也比在BC中分别引用好,不然无法在A中只保存B或C之一的对象