web-dev-qa-db-ja.com

hibernateh2埋め込み可能リストには「識別子」が必要です

従業員エンティティ内の関数(埋め込み可能)のリストを関連付けようとしていますが、H2は、「識別子」を期待していると言って不満を感じているようです。

原因:org.h2.jdbc.JdbcSQLException:SQLステートメントの構文エラー "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) ";期待される「識別子」;

問題は、私はすでに他のプロジェクトでそれを行っており、なぜそれが機能しないのかわかりません。

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を識別子として追加するように指示できますか?ありがとう

7
baskwo

私はばかげていて、列に「注文」という名前を付けていたことがわかりました。なぜH2が幸せではなかったのだろうか:upside_down:

変数名を別の名前に変更すると、機能しました。

29
baskwo

フィールドに名前を付けるときに同じ問題が発生します:private String toおよびprivate String from、exに変更。 dayTo、dayFrom、そしてそれは働きました。

1

入れてみてください; 「とテストの前に?

0
user641887

テスト用のSpringおよびH2データベースで同じ問題が発生しました。エンティティのフィールド名は"interval"で、名前を"inter"に変更し、問題を解決しました。

したがって、これらのエラーは、エンティティ内のSQL予約名が原因で発生します。

0
Caio