`
ezzze
  • 浏览: 42421 次
  • 性别: 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了

分享到:
评论

相关推荐

    MySQL:The used SELECT statements have a different number of columns

    在MySQL数据库操作中,"The used SELECT statements have a different number of columns" 是一个常见的错误提示,这表明在使用UNION或UNION ALL等合并查询语句时,参与合并的各个SELECT子句返回的列数量不匹配。...

    ERROR 1222 (21000): The used SELECT statements have a different number of columns

    在MySQL数据库中,当你尝试执行一个包含`UNION`操作的SQL查询时,可能会遇到错误“ERROR 1222 (21000): The used SELECT statements have a different number of columns”。这个错误提示意味着你在`UNION`操作中...

    SSD7 选择题。Multiple-Choice

    (b) the name of the table, the names of the table's attributes, the data types of the table's attributes, the formats of the table's attributes, and the maximum number of rows that the table can have ...

    bootstrap-table-fixed-columns-v1.0.2.zip

    最近需要对表头进行冻结,找到了bootstrap-table-fixed-columns组件(也是bootstrap-table作者写的)能实现冻结效果,但带来了其他问题,包括:排序失效、列宽错位、合并行无效等,于是引入该组件的同时,顺便解决了...

    Getting the number of columns in report view获得列表视图的列

    "Getting the number of columns in report view"这个主题是关于如何获取列表视图中的列数,这对于界面设计、数据分析以及用户交互优化具有重要意义。下面我们将深入探讨这一话题。 首先,我们需要理解列表视图...

    bootstrap-table-fixed-columns.zip

    1. 解压 `bootstrap-table-fixed-columns.zip` 文件,获取其中的 JavaScript 和 CSS 文件。 2. 将这些文件上传到 FastAdmin 的公共资源目录,例如 `public/assets/js` 和 `public/assets/css`。 3. 在需要使用固定...

    bootstrap-table-fixed-columns(css,js)

    这个项目的扩展`bootstrap-table-fixed-columns`专注于解决在大表格中固定首列或首行的问题,使得在滚动时这些重要列始终保持可见,提高用户在浏览长表格时的可读性和交互性。在网页设计中,尤其是在数据密集型应用...

    bootstrap-table-fixed-columns.js

    &lt;table id="fixedTable" data-toggle="table" data-fixed-columns="true" data-fixed-column-left="1"&gt; &lt;th data-field="id"&gt;ID &lt;th data-field="name"&gt;Name &lt;th data-field="age"&gt;Age &lt;th data-field=...

    bootstrap-table-fixed-columns

    2. 初始化表格:使用 `data-fixed-columns` 属性在表格标签中启用固定列功能,并通过 `data-fixed-number` 设置要固定的列数。 3. 配置选项:根据需要,可以使用 JavaScript 代码设置更多高级选项,如 `...

    bootstrap-table-fixed-columns-master.zip

    "bootstrap-table-fixed-columns-master.zip"这个压缩包中包含的就是一个用于实现Bootstrap Table固定列效果的JavaScript插件。这个插件允许我们在表格左右两侧设置固定的列,使得关键信息始终显示在用户的视野内,...

    bootstrap-table-fixed-columns冻结列,并完善排序、列宽和合并行

    1. **冻结列**:冻结列功能允许用户在滚动表格时,始终保持某些列(通常是包含关键信息的列)在视窗的可见范围内。这在处理大量数据时非常有用,因为它保持了列头的可见性,方便用户理解每一列的含义。 2. **排序...

    fixed-columns

    在网页设计和开发中,"fixed-columns"是一个常见的概念,特别是在处理数据密集型的应用场景,如数据表或者报表展示。这个特性允许用户在滚动浏览长表格时,将某些列(通常是列头)固定在屏幕的一侧,使得这些关键...

    jquery-resizable-columns

    1. **引入依赖**:首先,需要在页面中引入jQuery库和"jquery-resizable-columns"插件的JS和CSS文件。 2. **标记表格**:在HTML中为需要实现拖动列宽的表格添加特定的标识,如`class="resizable"`。 3. **初始化插件*...

    emd_visu_hht_EMD_emd_visu_

    1. **数据预处理**:在进行EMD之前,可能需要对原始数据进行一些预处理步骤,如去除噪声或平滑处理。 2. **EMD算法**:核心部分是EMD算法的实现,它涉及对数据进行多次迭代,找出局部极值,并通过spline插值构造出...

    微软内部资料-SQL性能优化5

    Keeping your clustered key value small increases the number of index rows that can be placed on an index page and decreases the number of levels that must be traversed. This minimizes I/O. As we’ll ...

    bootstraptable-reorder-columns表格拖拽排序列

    "bootstraptable-reorder-columns" 是这个库的一个扩展插件,专门用于实现表格列的拖拽排序功能。用户可以通过简单的拖放操作来调整表格列的顺序,极大地提高了用户在查看和管理大量数据时的灵活性和便利性。 在Web...

Global site tag (gtag.js) - Google Analytics