Datanucleus меняет имена столбцов? - PullRequest
0 голосов
/ 23 августа 2011

У меня есть два класса, которые выглядят так:

@PersistenceCapable(detachable="true")
@Inheritance(strategy=InheritanceStrategy.SUBCLASS_TABLE)
public abstract class BasicReference implements Serializable {

   private static final long serialVersionUID = 1L;

   @Persistent(column="last_modified")
   private Date lastModified;

   public abstract String getTitle();
   public abstract void setTitle(String title);

   public Date getLastModified() {
      return lastModified;
   }

   public void setLastModified(Date lastModified) {
      this.lastModified = lastModified;
   }
}


@PersistenceCapable(table="X_MYENTRY",detachable="true")
@Inheritence(strategy=Inheritence.COMPLETE_TABLE)
public class MyEntry extends BasicReference {   

   private static final long serialVersionUID = 1L;

   @Persistent(column="MYENTRY_ID")
   private Integer id;

   @Persistent
   private String title;

   @Override
   public String getTitle() {
      return title;
   }

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

   public Integer getId() {
      return id;
   }

}

Моя схема базы данных выглядит следующим образом:

CREATE TABLE X_MYENTRY (
   MYENTRY_ID int identity(1,1),
   TITLE varchar(64),
   lastModified datetime
)

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

Теперь, когда я пытаюсь выполнить запрос из диспетчера постоянства, я получаю сообщение об ошибке, что столбец X_MYENTRY_ID не может быть найден.Хотя я указал имя столбца как MYENTRY_ID.

На данный момент я даже не очень беспокоюсь о @PrimaryKey, я просто хочу иметь возможность вводить объекты.

Я пытался изменить аннотации для использования различных значений.Все, кроме MYENTRY_ID, выдаст ошибку, что указанный столбец не существует.Однако, если я использую MYENTRY_ID, я получаю X_MYENTRY_ID не существует.

Я попытался изменить столбец в базе данных, просто в качестве теста, и я получил другую ошибку: org.datanucleus.exceptions.NucleusUserException: Столбец "X_MYENTRY_ID" существует в таблице "X_MYENTRY" и содержит недопустимые метаданные.Существующий столбец: «

Моя таблица в SQL Server называется X_REFERENCE, а первичный ключ - REFERENCE_ID int identity (1,1). На данный момент я даже не беспокоюсь о @PrimaryKey, просто хочучтобы иметь возможность считывать данные. Однако, когда я пытаюсь сделать запрос через PersistenceManager, я получаю ошибку SQL для столбца X_REFERENCE_ID. Если я изменяю имя столбца в аннотациях на что-то другое («YREFERENCE_ID»), оноПохоже, что он подхватил это и соблюдает его. Но "REFERENCE_ID", похоже, автоматически заменяется на "X_REFERENCE_ID". Если я переименую столбец в моей тестовой базе данных в X_REFERENCE_ID, выдается ошибка, что REFERENCE_ID не может быть найден!

Любая помощь в получении этих идентификаторов будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 августа 2011

Удаление @Inheritence (стратегии = Inheritence.COMPLETE_TABLE), кажется, добилось цели!

...