Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPA annotations: связывание композитными ключами, ошибка MappingException 
V
    Опции темы
Stifler
Дата 22.10.2012, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.5.2007

Репутация: нет
Всего: нет



Приветствую!

Пытаюсь натянуть 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


Подскажите, плиз, в чём может быть проблема. У кого какие идеи?
PM   Вверх
Stifler
Дата 26.10.2012, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.5.2007

Репутация: нет
Всего: нет



Нашёл решение
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.