3

ddl-generation を drop-and-create-tables に設定すると、すべて問題ありません。しかし、テーブルを作成または拡張するように設定すると、次のようになりました。

Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PERSON_ID_SEQ

設定方法は次のとおりです。

persistence.xml

<persistence ...>
  <persistence-unit name="persistencetest">
    <properties>
      <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />

      <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:test-db" />

      <property name="javax.persistence.jdbc.user" value="sa" />
      <property name="javax.persistence.jdbc.password" value="" />

      <property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
      <property name="eclipselink.ddl-generation.output-mode" value="database" />
    </properties>

    <class>test.Person</class>
  </persistence-unit>
</persistence>

Person.java

@Entity
public class Person
{
  @Id
  @SequenceGenerator(name = "id_seq", sequenceName = "PERSON_ID_SEQ")
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq")
  private long id;

  ...
}

pom.xml

...
<dependency>
  <groupId>org.glassfish.extras</groupId>
  <artifactId>glassfish-emdedded-all</artifactId>
  <version>3.1</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>org.eclipse.persistence.jpa</artifactId>
  <version>2.4.1</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.hsqldb</groupId>
  <artifactId>hsqldb</artifactId>
  <version>2.2.9</version>
</dependency>
...

では、テーブルの削除と作成は正常に実行されているのに、テーブルの作成または拡張が失敗する原因は何でしょうか?

4

1 に答える 1