JBoss Eclipselink не создает индексы в postgresql для create-tables / create-or-exte-tables - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над проектом maven с использованием JBoss и eclipselink, и у меня возникают проблемы при создании индексов (через JPA) в postgresql с сервером JBoss.

Таблицы и индексы создаются, когда свойство ddl-generationустанавливается в "drop-and-create-tables"

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>

Но когда я устанавливаю это свойство в "create-or-extend-tables" или "create-tables", таблицы создаютсяи обновлены, но мои индексы НЕ.

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

Я попытался запустить один и тот же код на сервере Glassfish, и на Glassfish индексы СОЗДАЮТСЯ.Таким образом, проблема возникает, только когда я запускаю сервер JBoss (в конечном итоге, я хочу, чтобы мой проект работал на сервере JBoss).

Вот мой файл 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="Request_PU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/gid_postges</jta-data-source>
<class>be.uclouvain.digit.request.models.LogRequest</class>
<class>be.uclouvain.digit.request.models.LogStatus</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
  <property name="eclipselink.logging.level" value="FINE"/>
  <property name="eclipselink.logging.level.sql" value="FINE"/>
  <property name="eclipselink.logging.parameters" value="true"/>
  <property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>

  <property name="eclipselink.deploy-on-startup" value="true"/>
</properties>

А вот пример сущности

@Entity
@Table(name = "Identity", schema = "digit")
@SequenceGenerator(name = "SEQ_Identity", sequenceName = "SEQ_Identity", schema = "digit", allocationSize = 1, initialValue = 500000)
@EntityListeners(IdentityListener.class)
@Index(columnNames = {"Lastname","Firstname"},name = "IdxName")
public class Identity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_Identity")
    @Index
    @Column(name = "Identity_Id")
    private BigInteger identityId;
    @NotNull
    @Size(max = 50)
    @Index
    @Column(name = "Lastname", nullable = false, length = 50)
    private String lastname;
    @NotNull
    @Size(max = 50)
    @Column(name = "Firstname", nullable = false, length = 50)
    private String firstname;

    ...
}

1 Ответ

0 голосов
/ 06 марта 2019

Хорошо, так что мне удалось обойти эту проблему, чтобы решить проблему, просто создав свои таблицы с помощью eclipselink, а затем сохраните сценарий и затем выполните этот сценарий в качестве проверки, чтобы индексы не создавались с таблицами.затем они будут созданы с помощью сценария.

Не очень хорошо, но он будет работать в ожидании лучшего решения.

Мой новый файл persistence.xml выглядит так:

  <property name="eclipselink.logging.parameters" value="true"/>
  <property name="eclipselink.logging.level.sql" value="FINEST" />
  <property name="eclipselink.logging.level" value="FINEST" />
  <property name="eclipselink.logging.level.cache" value="FINEST" />

  <property name="eclipselink.ddl-generation" value="create-tables"/>

  <property name="javax.persistence.schema-generation.scripts.action" value="create" />
  <property name="javax.persistence.schema-generation.scripts.create-target" value="../../NetBeansProjects/digit/src/Digit-kernel/src/main/resources/createKernel.sql"/>
  <property name="javax.persistence.schema-generation.scripts.drop-target" value="../../NetBeansProjects/digit/src/Digit-kernel/src/main/resources/dropKernel.sql"/>
  <property name="javax.persistence.sql-load-script-source" value="createKernel.sql"/>
  <property name="eclipselink.deploy-on-startup" value="true"/>
...