`
ezzze
  • 浏览: 41470 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[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了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics