首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

[3rd][2011-一] foreign key must have same number of columns

2013-11-09 
[3rd][2011-1] foreign key must have same number of columns最近一周在做一些查询的优化,看着一两年前写

[3rd][2011-1] foreign key must have same number of columns
最近一周在做一些查询的优化,看着一两年前写的东西就在抱怨 为什么原先不这么这么写......

好吧,谁让你一开始就没定下所谓的业务呢......

其实优化工作很简单,去除无用的表连接,不过因为整个查询是由criteria构建,所以你的VO关系决定了你的criteria path是不是最优的。

原来的逻辑是A -> AB -> B -> C

由于B是一张KW级别的表,加上C有B字段

所以就改成 A-> AB -> C,

在AB中建个关联 到 C

如下:

class A{  .......}class B{  ......}class AB{   private A a;   private B b;   private Set<C> c = new HashSet<C>(0);     @OneToMany(fetch = FetchType.LAZY)  @JoinColumn(name = "B_ID")  public Set<C> getC(){       return c;  }}class C{  private B b}


不过很可惜,因为AB 中已经有个以B_ID 为外键关联到B了,而AB是复合主键,所以在写上述的mapping时候会报

foreign key must have same number of columns as the referenced primary key.

它把复合主键给你和B_id给mapping 上了,真够傻X的,难道就不能关联单个么。

好吧,改成

class AB{   private A a;   private B b;   private Set<C> c = new HashSet<C>(0);     @OneToMany(fetch = FetchType.LAZY)  @JoinColumn(name = "B_ID",referencedColumnName="B_ID")  public Set<C> getC(){       return c;  }}


就OK了

热点排行