Ошибка адаптера Eclipse Glassfish 3.1 — ПОСЛЕДОВАТЕЛЬНОСТЬ уже существует

#eclipse #jpa #glassfish #jpa-2.0 #eclipselink

#eclipse #jpa #glassfish #jpa-2.0 #eclipselink

Вопрос:

У меня возникли некоторые проблемы с адаптером сервера Eclipse для Glassfish 3.1. Я использую автоматически сгенерированные идентификаторы JPA. Если сервер запущен, и у меня есть политика создания и удаления для JPA, то каждый раз, когда происходит горячее повторное развертывание, я получаю большое жирное сообщение об ошибке Eclipse:

не удается развернуть MyWebApp Ошибка развертывания для модуля: MyWebApp:

PER01003: при развертывании обнаружены исключения SQL: PER01000: Получено исключение SQLException, выполняющее инструкцию «СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ ТАБЛИЦ (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(38), ПЕРВИЧНЫЙ КЛЮЧ (SEQ_NAME))»:

org.postgresql.util.Исключение PSQLException: ОШИБКА: отношение «последовательность» уже существует

Я знаю, что это всего лишь предупреждение Glassfish (чертовски старое …: http://java.net/projects/glassfish/lists/persistence/archive/2006-11/message/221 ) и не является опасным (это потому, что drop.ddl удаляет только одну строку таблицы последовательности вместо всей таблицы).

Это просто ЛАВАШ, чтобы видеть это всплывающее окно с ошибкой каждый раз, когда я сохраняю ресурс. Есть идеи, как избавиться от нее, не теряя функциональности создания и удаления? По крайней мере, чтобы это не мешало разработке…

Мой persistence.xml

 <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0">
    <persistence-unit name="JPATestsCascadePU" transaction-type="JTA">
        <jta-data-source>jdbc/myDB</jta-data-source>
        <properties>
            <property name="eclipselink.ddl-generation" 
                              value="drop-and-create-tables" />
        </properties>
    </persistence-unit>
</persistence>
 

Пример объекта, использующего автоматически сгенерированный идентификатор:

 @Entity
public class Website {

    @Id
    @GeneratedValue
    private long id;

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }    
}
 

Ответ №1:

Вам не понравится этот ответ: отключите функцию создания и удаления после первоначального запуска на сервере.

Честно говоря, кажется, что create-and-drop замедлит перераспределение… именно это и происходит при сохранении ресурса.

Вы можете сделать так, чтобы сообщение появлялось реже, отключив автоматическую публикацию…

Примечание: эта проблема относится к плагинам интеграции GlassFish для Eclipse, выпущенным до 2011-10-24, когда они взаимодействуют с GlassFish Server 3.1.1 и новее.

Комментарии:

1. Спасибо @vkraemer! Вероятно, вы правы в отношении замедления перераспределения. Однако я использовал эту настройку для динамического тестирования сопоставлений JPA, проверки и взаимодействия с транзакциями. Такого рода приложения действительно маленькие — я отношусь к ним просто как к тестированию, и поэтому мне очень понравилась эта функция чистого воссоздания наряду с автоматической публикацией при каждом «сохранении». Это позволяет мне нажать ctrl s для измененного класса и забыть об остальном. Я с нетерпением жду понедельника 🙂 Еще раз спасибо!

2. После вашего добавления плагин работает как шарм. Большое спасибо, Винс!

3. Я использую Glassfish 3.1.2 вместе с ant для развертывания, а затем повторного развертывания своих классов, поэтому эта ошибка, похоже, относится и к последней версии Glassfish.