«ALTER TABLE» не может быть выполнен, потому что таблица не существует - PullRequest
3 голосов
/ 12 августа 2010

Я использую JPA 2 с Eclipselink 2 и дерби в памяти db для своих тестов.Когда я запускаю свою маленькую тестовую программу, я получаю следующее исключение:

[EL Warning]: 2010-08-12 17: 17: 44.943 - ServerSession (948252856) - Исключение [EclipseLink-4002] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.DatabaseException Внутреннее исключение: java.sql.SQLSyntaxErrorException: «ALTER TABLE» нельзя выполнить для «ARTICLE_ARTICLE», так как он не существует.Код ошибки: 30000 Вызов: ALTER TABLE ARTICLE_ARTICLE DROP CONSTRAINT RTCLrtclsRltdTThsD Запрос: DataModifyQuery (sql = "ALTER TABLE ARTICLE_ARTICLE DROP CONSTRAINT RTCLrtclsRltdTThsD" * * 100 * * *)

* h5 (*) *1005* *5 * * * *5 * * * * * *5 * * * *

[EL Warning]: 2010-08-12 17: 47: 33.179 - ServerSession (1925661675) - Исключение [EclipseLink-4002] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.DatabaseException Внутреннее исключение: java.sql.SQLException: пользователю не хватает привилегии или объект не найден: ARTICLE_ARTICLE Код ошибки: -5501 Вызов: ALTER TABLE ARTICLE_ARTICLE DROP CONSTRAINT FK_ARTICLE_ARTICLE_articlesodID_Qlite_Ru_TQ_LIBLE_TRELE_TREQLTQLARTICLE_ARTICLE DROP CONSTRAINT FK_ARTICLE_ARTICLE_articlesRelatedToThis_ID ")

Стратегия генерации таблиц" drop-and-create ", так почему Eclipselink сообщает мне, что таблица не существует?

Или что-то такое?не так с моим примером класса?

@Entity
public class Article implements Serializable {

    @Id @GeneratedValue
    private int id;
    private String title;
  @ManyToMany(mappedBy = "relatedArticles")
  private Set<Article> articlesRelatedToThis = new HashSet<Article>();
  @ManyToMany(cascade = CascadeType.PERSIST)
  private Set<Article> relatedArticles = new HashSet<Article>();

  public Article() {}

  public Article(String title) {
    this.title = title;
  }

  public int getId() {
    return id;
  }

  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public Set<Article> getRelatedArticles() {
    return relatedArticles;
  }

  public void addRelatedArticle(Article related) {
    relatedArticles.add(related);
  }

  public void removeRelatedArticle(Article related) {
    relatedArticles.remove(related);
  }

  @PreRemove
  public void preRemove() {
    for(Article article : articlesRelatedToThis)
      article.removeRelatedArticle(this);
  }
}

1 Ответ

2 голосов
/ 13 августа 2010

Стратегия генерации таблицы - "выбрасывай и создавай", так почему же Eclipselink сообщает мне, что таблица не существует?

EcliseLink начинается с удаления ограничений таблицы (оператор alter, который вы видите), затем таблиц и затем воссоздания всего. Поскольку вы используете базу данных в памяти, на самом деле нечего отбрасывать, и EclipseLink сообщает о неудачных попытках как предупреждение. Просто игнорируй их.

...