应为 hibernate h2 可嵌入列表 "identifier"
hibernate h2 embeddable list expected "identifier"
我正在尝试在我的员工实体中关联一个函数列表(可嵌入),而 H2 似乎对这种说法不满意,它期望 "identifier"
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "
CREATE TABLE EMPLOYEE_FUNCTIONS (
EMPLOYEE_EMPLOYEEID VARCHAR(255) NOT NULL,
ACTIVE BOOLEAN NOT NULL,
DEPARTMENTNUMBER INTEGER NOT NULL,
DESCRIPTION VARCHAR(255),
ORDER[*] INTEGER NOT NULL
) "; expected "identifier";
问题是我已经在其他项目中这样做了,但我不明白为什么它不起作用。
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 中删除了一些不必要的属性。
什么可能导致此错误?是因为我的员工中有一个字符串作为标识符吗?如果是这样,我如何告诉 Hibernate 添加 Employee_EmployeeID 作为标识符?
谢谢
尝试将 ;在 " 和测试之前 ?
原来我是个笨蛋,给一个专栏取了个名字"Order"。想知道为什么 H2 不开心:upside_down:
将变量名称更改为其他名称并且有效!
我在命名字段时遇到同样的问题: private String to
和 private String from
,更改为 ex。 dayTo , dayFrom ,它起作用了。
我在 Spring 和 H2 数据库测试时遇到了同样的问题,我的实体有字段名称 "interval",我重命名为 "inter" 并解决了问题。
因此,这些错误的发生是由于实体中的 sql 个保留名称。
Order as entity 也有同样的问题。将 table 名称更改为“orderz”并继续。
在我的案例中,问题的原因是插入语句中的语法不正确
问题:
insert into 'table name missing' (column names...) values(values...);
添加 table 名称后
修复:
insert into 'table name specified' (column names...) values(values...);
有时很难发现微不足道的错误:)
我遇到了同样的问题,但我的却少了一个分号。
由于我的实体中有一个名为“间隔”的字段,我遇到了类似的问题。
这个 post 的答案帮助我确定了根本原因,但是更改字段名称对我来说不是解决方案,因为“间隔”非常适合我的 class.
我使用的解决方案是使用休眠注释重命名 table 列。
@Column(name = "FREQUENCY_INTERVAL")
private int interval;
这帮助我将变量名称保持为 'interval',同时映射到数据库接受的列名称table。
我还遇到了一个名为 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)"
}
我在 h2 中使用订单作为 table 名称。更改为类似 _order 的内容,我明白了!
如你所见here,order是h2的保留字
我正在尝试在我的员工实体中关联一个函数列表(可嵌入),而 H2 似乎对这种说法不满意,它期望 "identifier"
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement " CREATE TABLE EMPLOYEE_FUNCTIONS ( EMPLOYEE_EMPLOYEEID VARCHAR(255) NOT NULL, ACTIVE BOOLEAN NOT NULL, DEPARTMENTNUMBER INTEGER NOT NULL, DESCRIPTION VARCHAR(255), ORDER[*] INTEGER NOT NULL ) "; expected "identifier";
问题是我已经在其他项目中这样做了,但我不明白为什么它不起作用。
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 中删除了一些不必要的属性。 什么可能导致此错误?是因为我的员工中有一个字符串作为标识符吗?如果是这样,我如何告诉 Hibernate 添加 Employee_EmployeeID 作为标识符? 谢谢
尝试将 ;在 " 和测试之前 ?
原来我是个笨蛋,给一个专栏取了个名字"Order"。想知道为什么 H2 不开心:upside_down:
将变量名称更改为其他名称并且有效!
我在命名字段时遇到同样的问题: private String to
和 private String from
,更改为 ex。 dayTo , dayFrom ,它起作用了。
我在 Spring 和 H2 数据库测试时遇到了同样的问题,我的实体有字段名称 "interval",我重命名为 "inter" 并解决了问题。
因此,这些错误的发生是由于实体中的 sql 个保留名称。
Order as entity 也有同样的问题。将 table 名称更改为“orderz”并继续。
在我的案例中,问题的原因是插入语句中的语法不正确 问题:
insert into 'table name missing' (column names...) values(values...);
添加 table 名称后
修复:
insert into 'table name specified' (column names...) values(values...);
有时很难发现微不足道的错误:)
我遇到了同样的问题,但我的却少了一个分号。
由于我的实体中有一个名为“间隔”的字段,我遇到了类似的问题。 这个 post 的答案帮助我确定了根本原因,但是更改字段名称对我来说不是解决方案,因为“间隔”非常适合我的 class.
我使用的解决方案是使用休眠注释重命名 table 列。
@Column(name = "FREQUENCY_INTERVAL")
private int interval;
这帮助我将变量名称保持为 'interval',同时映射到数据库接受的列名称table。
我还遇到了一个名为 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)"
}
我在 h2 中使用订单作为 table 名称。更改为类似 _order 的内容,我明白了!
如你所见here,order是h2的保留字