Quarkus Hibernate with Panache查询意外添加ID列如何解决
解决方案
根因说明
你遇到的问题由PanacheEntity的默认特性导致:该父类内置了一个标注@Id的id字段,Hibernate会默认将其作为主键加入所有生成的SQL语句中,与你现有无id列的DB2表结构不匹配。
解决步骤
- 更换实体类父类:将原有
extends PanacheEntity修改为extends PanacheEntityBase。PanacheEntityBase是Panache官方提供的无默认主键的基类,支持完全自定义主键规则,原有的find、persist等Panache便捷操作方法均可正常使用,无功能差异。 - 配置自定义主键:给业务主键字段
IDSCOMP添加@Id注解,若你的DB2实例对表名字段名大小写敏感,可以补充@Column注解显式指定列映射关系,避免映射错误。
修改后完整实体类示例
@Entity public class PCFPIDS extends PanacheEntityBase { @Id @Column(name = "IDSCOMP", length = 2) public String IDSCOMP; @Column(name = "IDSID") public String IDSID; @Column(name = "IDSMAX") public int IDSMAX; public static PCFPIDS getLatestSession() { return find("IDSCOMP", "##").firstResult(); } }
修改完成后重启应用,Hibernate生成的SQL将不再自动拼接id字段,完全适配你现有表结构,无需调整DB2端的表定义。
内容的提问来源于stack exchange,提问作者Paul Stoner
相关产品推荐
相关产品推荐

