У меня есть некоторые Entity 'Group
' следующим образом (геттеры и сеттеры удалены для удобства чтения)Hibernate схемы ошибка генерации
@Entity
public class Group {
@Id
@GeneratedValue
private long id;
@NotNull
@Size(min = 2, max = 50, message = "Pflichtfeld")
@Pattern(regexp = Validation.REG_NAMES, message = Validation.MSG_NAME)
private String groupname;
@NotNull
@Size(min = 2, max = 50, message = "Pflichtfeld")
private String groupDescription;
@ManyToMany
private List<User> members;
@ManyToMany
private List<Rights> ownedRights;
}
При развертывании в моей JBoss я получаю следующие ошибки:
15:08:53,464 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (MSC service thread 1-2) HHH000388: Unsuccessful: create table Group (id bigint not null, groupDescription varchar(50) not null, groupname varchar(50) not null, primary key (id)) 15:08:53,466 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (MSC service thread 1-2) Syntax error in SQL statement "CREATE TABLE GROUP[*] (ID BIGINT NOT NULL, GROUPDESCRIPTION VARCHAR(50) NOT NULL, GROUPNAME VARCHAR(50) NOT NULL, PRIMARY KEY (ID)) "; expected "identifier"; SQL statement: create table Group (id bigint not null, groupDescription varchar(50) not null, groupname varchar(50) not null, primary key (id)) [42001-161]
Мой Persistence .xml выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary">
<jta-data-source>java:jboss/datasources/crmDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
Почему спящий режим сгенерирован SQL Faulty? Как я могу исправить эту проблему?
я не могу проверить, если группа зарезервированное слово в h2 также. Вам нужно сделать это самостоятельно, выполнив в своей базе данных непосредственно запрос: CREATE TABLE GROUP(); Если это не работает, единственным решением будет использовать в базе данных другое имя таблицы, а в классе java - аннотацию таблицы: @Table (name = "group_table") – BBogdan
Это действительно так. Помимо переименования моей Enitity, есть ли способ сделать эту работу приятной и чистой? Btw. неопределенности в ответах действительно не выглядят красиво. Я могу подтвердить, что GROUP является зарезервированным ключевым словом в h2. – Vogel612
См. Мой ранее отредактированный комментарий – BBogdan