В нашей компании есть странная модель базы данных, которую нельзя изменить, поскольку многие системы работают с ними. Вплоть до того, что у нас есть прямое Java-приложение, которое подключается к базе данных в спящем режиме и загружает данные. У нас есть для каждой таблицы один файл сопоставления xml.
Странная вещь в базе данных в том, что у нас нет первичных ключей. Большинство таблиц имеют уникальный индекс, содержащий несколько столбцов.
Теперь мы хотим использовать сервер приложений (jboss) и модель ejb. Итак, я создал такой класс:
@Entity
@Table (name = "eakopf_t")
public class Eakopf implements Serializable {
@Embeddable
public static class EakopfId implements Serializable {
private String mandant;
private String fk_eakopf_posnr;
// I removed here the getters and setters to shorten it up
}
@Id
private EakopfId id;
private String login;
// I removed the getters and setters here as well
}
Это прекрасно работает.
Поскольку у наших клиентов разные версии схемы базы данных, я думал о расширении этого класса при каждом изменении выпуска базы данных. Таким образом, каждый интерфейс, который мы создаем с помощью Java, может решить, какая версия таблицы будет использоваться.
Вот расширенный класс таблицы
@Entity
@Table (name = "eakopf_t")
public class Eakopf6001 extends Eakopf implements Serializable {
private String newField;
// getters and setters
}
Если я использую Eakopf (базовая версия), он работает, если я делаю что-то подобное:
EakopfId id = new EakopfId();
id.setMandant("001");
id.setFk_eakopf_posnr("ABC");
Eakopf kopf = (Eakopf) em.find(Eakopf.class, id);
Но если я сделаю это:
EakopfId id = new EakopfId();
id.setMandant("001");
id.setFk_eakopf_posnr("ABC");
Eakopf6001 kopf = (Eakopf6001) em.find(Eakopf6001.class, id);
происходит это исключение
javax.ejb.EJBException: javax.persistence.PersistenceException:
org.hibernate.WrongClassException: Object with id:
de.entity.Eakopf$EakopfId@291bfe83 was not of the specified subclass:
de.entity.Eakopf (Discriminator: null)
У кого-нибудь есть идея?
много приветствий,
Hauke