You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA与EclipseLink继承实现异常:查询表及别名错误

问题场景

在两个类间实现TABLE_PER_CLASS继承映射,基于Product类创建DataProvider用于Grid组件时功能正常,但对@ManyToOne属性执行过滤操作时出现SQL语法错误。

实体类定义

Product类

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name="product")
@DiscriminatorColumn(name = "product_type_desc", discriminatorType = DiscriminatorType.STRING)
public class Product
{
   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   @Column(name="id")
   private int id;

   @OneToOne
   @JoinColumn(name = "product_model_id")
   private ProductModel productModel;
}

ProductModel类

@Table(name="product_model")
@DiscriminatorValue("product_model")
public class ProductModel extends Product
{
    @OneToOne(mappedBy = "productModel")
    private Product product;
}

报错信息

Internal Exception: java.sql.SQLSyntaxErrorException: Unknown column 't0.id' in 'order clause'
Error Code: 1054
Call: SELECT t1.id AS a1, t1.product_model_id AS a89 FROM product_model t1 WHERE (t1.disabled = ?) ORDER BY t0.id DESC LIMIT ?, ?

错误点

  • 查询时未使用product表,反而调用了product_model表
  • ORDER BY子句中引用了未定义的表别名t0

问题分析

  1. EclipseLink最初正确构建了以t0为别名的product表查询语句
  2. 构建SELECT语句时错误选择了product_model表而非product表
  3. 更新FROM子句并将表别名改为t1后,未同步修改ORDER BY子句中的别名引用

尝试过的解决方法

使用ClassExtractor,但问题未得到解决

环境信息

  • EclipseLink 2.7.12
  • JavaX Persistence 2.2.1
  • 使用Criteria API

内容的提问来源于stack exchange,提问作者Yberamos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:03:14