gpt4 book ai didi

java - hibernate : Unknown column in field list

转载 作者:行者123 更新时间:2023-11-29 07:16:54 29 4
gpt4 key购买 nike

我正在尝试建立单向 @OneTaMany 关系,如 Hibernate User Guide (2.7.2) 中所示但是当我尝试将以下对象保存在 MariaDB 数据库中时:

Filter filter = new Filter("TLS_A320");
filter.addConstraint(new Constraint(ConstraintType.DEPARTURE, "TLS"));
filter.addConstraint(new Constraint(ConstraintType.AIRCRAFT, "A320"));
session.save(filter);

我遇到了这个异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Filter_idFilter' in 'field list'

这里有 2 个类:

Filter.java

public class Filter {

@Id
@Column(name = "idFilter")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "name")
private String name;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Constraint> constraintList;

//more code
};

Constraint.java

public class Constraint {

@Id
@Column(name = "idConstraint")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "type")
@Enumerated(EnumType.ORDINAL)
private ConstraintType constraintType;

@Column(name = "value")
private String value;

//more code
}

这是表格定义:

CREATE TABLE `Constraint` (
idConstraint INT NOT NULL AUTO_INCREMENT,
type INT NOT NULL,
value VARCHAR(10) NOT NULL,

PRIMARY KEY (idConstraint)
);

CREATE TABLE Filter (
idFilter INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) UNIQUE NOT NULL,

PRIMARY KEY (idFilter)
);

CREATE TABLE Filter_Constraint (
idFilter INT UNIQUE NOT NULL,
idConstraint INT NOT NULL,

CONSTRAINT fk_Filter_Constraint_Filter FOREIGN KEY (idFilter) REFERENCES Filter(idFilter),
CONSTRAINT fk_Filter_Constraint_Constraint FOREIGN KEY (idConstraint) REFERENCES `Constraint`(idConstraint)
);

在我看来,过滤器和约束插入都很好,但在 Filter_Constraint 表中插入时发生异常:

DEBUG org.hibernate.SQL - insert into Filter (name) values (?)
DEBUG org.hibernate.id.IdentifierGeneratorHelper - Natively generated identity: 4
DEBUG org.hibernate.SQL - insert into `Constraint` (type, value) values (?, ?)
DEBUG org.hibernate.id.IdentifierGeneratorHelper - Natively generated identity: 5
DEBUG org.hibernate.SQL - insert into `Constraint` (type, value) values (?, ?)
DEBUG org.hibernate.id.IdentifierGeneratorHelper - Natively generated identity: 6
DEBUG org.hibernate.SQL - insert into `Filter_Constraint` (Filter_idFilter, `constraintList_idConstraint`) values (?, ?)
DEBUG org.hibernate.engine.jdbc.spi.SqlExceptionHelper - could not execute statement [n/a]
DEBUG com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Filter_idFilter' in 'field list'

我对 Hibernate 还很陌生,我只是不知道我做错了什么。

最佳答案

您没有在 constraintList 上定义任何连接列或反向连接列,因此 Hibernate 将自动生成列名称,这很可能导致名称 Filter_idFilter

实体名称将成为名称的一部分,因为Constraints可以具有同名的 id 字段,即idFilter。当然知道情况并非如此,但 Hibernate 不知道(或者至少列名生成代码没有那么复杂),因此它必须假设可以 就是这样。

连接表名称也是如此,因此您可能需要使用 @JoinTable 以及 constraintList 上的连接列和逆连接列的定义。但是,由于关系无论如何都是 OneToMany,为什么不添加对 Constraint 的反向引用,将过滤器的 id 添加到表 Constraint 并完全摆脱连接表吗?

关于java - hibernate : Unknown column in field list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678317/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com