Приветствую! Пытаюсь натянуть hibernate на существующую структуры бд. Primary key там суррогатных нету, делаем составные. Получается, что PrimaryKey состоит из 5ти колонок: year, type, area_id, short_code, long_code. В то же время, эти колонки выступают в качестве составных внешних ключей на другие таблицы: year, type, area_id на одну и year, short_code, long_code на другую. Year используется в обоих внешних ключах. Код | @Entity @Table(name = "equipment") @IdClass(value = EquipmentId.class) public class Equipment {
private Model model;
private EquipmentPackage eqPackage;
@Id public Model getModel() { return model; }
@Id public EquipmentPackage getEqPackage() { return eqPackage; }
// all other stuff: fields, getters and setters }
public class EquipmentId {
private Model model;
private EquipmentPackage eqPackage;
@ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year", insertable = false), @JoinColumn(name = "type", referencedColumnName = "type", insertable = false), @JoinColumn(name = "area_id", referencedColumnName = "area_id", insertable = false) }) public Model getModel() { return model; }
@ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year", insertable = false), @JoinColumn(name = "short_code", referencedColumnName = "short_code", insertable = false), @JoinColumn(name = "long_code", referencedColumnName = "long_code", insertable = false) }) public EquipmentPackage getEqPackage() { return eqPackage; }
}
|
Теперь, я пытаюсь использовать указанный выше объект в другом: Код | @Entity @Table(name = "description") @IdClass(value = DescriptionId.class) class Description {
private Equipment equipment;
private String langCode;
@Id public Equipment getEquipment() { return equipment; }
@Id public String getLangCode() { return langCode; }
// all other stuff: fields, getters and setters }
public class DescriptionId {
private Equipment equipment;
private String langCode;
@ManyToOne @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year"), @JoinColumn(name = "type", referencedColumnName = "type"), @JoinColumn(name = "area_id", referencedColumnName = "area_id"), @JoinColumn(name = "short_code", referencedColumnName = "short_code"), @JoinColumn(name = "long_code", referencedColumnName = "long_code") }) public Equipment getEquipment() { return equipment; }
@Column(name = "lang") public String getLangCode() { return langCode; } }
|
Получается, что Description имеет PrimaryKey: year, type, area_id, short_code, long_code, lang и связан с Equipment внешним ключом year, type, area_id, short_code, long_codeЗапускаю - получаю Код | Caused by: org.hibernate.MappingException: property mapping has wrong number of columns: database.entity.equipment.Description._identifierMapper type: component[equipment,langCode] at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:459) at org.hibernate.mapping.RootClass.validate(RootClass.java:215) at org.hibernate.cfg.Configuration.validate(Configuration.java:1149) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1334) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) ... 38 more
|
Подскажите, плиз, в чём может быть проблема. У кого какие идеи?
|