2014-02-03 6 views
-1

У меня есть некоторые 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? Как я могу исправить эту проблему?

ответ

4

В базе данных h2 в качестве зарезервированного слова используется GROUP, и до тех пор, пока вы его используете, у вас будут ошибки в генерации таблиц и в других запросах, сгенерированных спящим.

Либо переименовать модель класса или использовать на уровне класса аннотацию @Table, как описано в the JBoss hibernate reference (esp. Section 2.1.1.1)

Пример использования:

@Entity 
@Table(name="group_table") 
public class Group { 
+0

я не могу проверить, если группа зарезервированное слово в h2 также. Вам нужно сделать это самостоятельно, выполнив в своей базе данных непосредственно запрос: CREATE TABLE GROUP(); Если это не работает, единственным решением будет использовать в базе данных другое имя таблицы, а в классе java - аннотацию таблицы: @Table (name = "group_table") – BBogdan

+0

Это действительно так. Помимо переименования моей Enitity, есть ли способ сделать эту работу приятной и чистой? Btw. неопределенности в ответах действительно не выглядят красиво. Я могу подтвердить, что GROUP является зарезервированным ключевым словом в h2. – Vogel612

+0

См. Мой ранее отредактированный комментарий – BBogdan

Смежные вопросы