我正在尝试将一个功能列表(Embeddable)关联到我的员工实体中,而H2似乎对此表示不满意,因为它预期会出现“标识符”
引起:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误“ 创建表EMPLOYEE_FUNCTIONS( EMPLOYEE_EMPLOYEEID VARCHAR(255)NOT NULL, ACTIVE BOOLEAN NOT NULL, DEPARTMENTNUMBER INTEGER NOT NULL, VARCHAR(255), ORDER [*] INTEGER NOT NULL )“;期望”标识符“;
事情是我已经用其他项目做了这件事,我不明白为什么它不起作用。
Employee.java
@Entity
public class Employee extends AbstractScheduleEntity<EmployeeSchedule> {
public static final String ACOMBA_UNIQUE_FIELD = "acombaUnique";
@Id
@GenericGenerator(name = "sequence_id", strategy =
"ca.tecsar.core.sql.ServerSequenceGenerator")
@GeneratedValue(generator = "sequence_id")
@Column(name = "EmployeeID", unique = true, nullable = false)
private String employeeID;
@ElementCollection
private List<Function> functions;
//getter and setter
}
Function.java
@Embeddable
public class Function implements Serializable {
private int order;
private boolean active;
private String description;
private int departmentNumber;
//getter and setter
}
我在Employee中删除了一些不必要的属性。 什么可能导致此错误?是因为我的员工中有一个String作为标识符吗?如果是这样,我如何告诉Hibernate添加Employee_EmployeeID作为标识符? 感谢
答案 0 :(得分:19)
原来我是愚蠢的,并命名为“秩序”栏目。不知道为什么H2不开心:upside_down:
将变量名称更改为其他名称并且有效!
答案 1 :(得分:1)
订单与实体存在相同的问题。将表名称更改为“ orderz”并继续。
答案 2 :(得分:1)
我遇到了类似的问题,因为我的实体中有一个名为“间隔”的字段。 这篇文章的答案帮助我确定了根本原因,但是更改字段名称对我来说并不是一个解决方案,因为“间隔”对我的班级来说是完美的。
我使用的解决方案是使用 hibernate 注释重命名表列。
@Column(name = "FREQUENCY_INTERVAL")
private int interval;
这帮助我在映射到数据库可接受的列名时将变量名保留为“间隔”。
答案 3 :(得分:1)
我也遇到了一个名为 row
的实体字段的问题,因为它也是一个关键字
我指定了一个列名 ("SEAT_ROW"
) 来绕过它。
@Entity
data class Seat (
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
val id : Long,
@Column(name="SEAT_ROW")
val row : Char,
val num : Int,
val price : BigDecimal,
val description : String
) {
override fun toString(): String = "Seat $row-$num $$price ($description)"
}
答案 4 :(得分:0)
试着把;在“和测试之前?
答案 5 :(得分:0)
命名字段private String to
和private String from
时,我遇到了同样的问题,更改为ex。 dayTo,dayFrom和它起作用。
答案 6 :(得分:0)
我在进行测试的Spring和H2数据库上存在相同的问题,我的实体的字段名称为“ interval” ,我重命名为“ inter” 并解决了该问题
因此,这些错误是由于实体中的sql保留名称而发生的。
答案 7 :(得分:0)
原因是插入语句中的语法不正确 问题:
insert into 'table name missing' (column names...) values(values...);
添加表名后
修复:
insert into 'table name specified' (column names...) values(values...);
有时候很难发现琐碎的错误:)
答案 8 :(得分:0)
我遇到了同样的问题,但我的确缺少分号。
答案 9 :(得分:0)
我在 h2 中使用 order 作为表名。更改为 _order 之类的内容,我明白了!
如您所见,here,order 是 h2 的保留字。