Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/50: Рейтинг темы: голосов - 50, средняя оценка - 4.50
9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74

Hibernate. Составной первичный ключ

03.05.2013, 17:44. Показов 9995. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Есть проблемка с созданием индифицирующего составного ключа.

Есть две таблицы "Types" и "Articles". Если использовать SQL то их описание где-то такое:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE `types`
(
   `type` VARCHAR(255),
    
    PRIMARY KEY (`type`)
);
 
CREATE TABLE `articles`
(
    `type` VARCHAR(255), 
    `model` VARCHAR(255),
    `manufacturer` VARCHAR(255),
 
     PRIMARY KEY (`type`,`model`),
     FOREIGN KEY (`type`) REFERENCES `types`(`type`)
);
Немного поучившись hibernate написал два класса:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Types.java
package my.business.entity;
 
import java.io.Serializable;
import javax.persistence.*;
 
@Entity
@Embeddable
public class Types {
    @Id
    @Column (name="TYPE")
    private String type;
 
    public String getType() {
        return type;
    }
 
    public void setType(String type) {
        this.type = type;
    }
}
и
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//Articles.java
package my.business.entity;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
 
@Entity
@Table (name="ARTICLES")
public class Articles implements Serializable {
    
    @Id
    @Column (name="MODEL")
    private String model;
    
    @EmbeddedId
    @OneToOne
    @JoinColumn(name="TYPE")
    private Types type;
 
    @Column (name="MANUFACTURER")
    private String manufacturer;
 
    public String getModel() {
        return model;
    }
 
    public Types getType() {
        return type;
    }
 
    public String getManufacturer() {
        return manufacturer;
    }
 
    public void setModel(String model) {
        this.model = model;
    }
 
    public void setType(Types type) {
        this.type = type;
    }
 
    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    } 
}
Потом где-то в коде создаю эти два объекта и сохраняю в БД

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main (String[] args)
    {
        Types type1=new Types();
        type1.setType("Tablet");
        Articles art1=new Articles();
        art1.setManufacturer("Samsung");
        art1.setModel("Tab 2");
        art1.setType(type1);
 
        SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
        Session session= sessionFactory.openSession();
 
        session.beginTransaction();
        
        session.save(type1);
        session.save(art1);
        session.getTransaction().commit();
}
И вроде все здорово супер, объекты сохраняются, структура таблиц такая, какая нужна, но....
Если дать простой HQL-запрос "from Types" он его выполнит, а запрос типа "from Articles" выдает ошибку:

org.hibernate.AnnotationException: my.business.entity.Types must not have @Id properties when used as an @EmbeddedId

Меняю @Id в Types на @EmbeddedId выдает другую каку:

Exception in thread "main" org.hibernate.AnnotationException: A Foreign key refering my.business.entity.Types from my.business.entity.Articles has the wrong number of column. should be 2


Подскажите дураку, что не так и как с этим бороться. Изучаю hibernate где-то дня 3, ничего в нем не шарю(((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2013, 17:44
Ответы с готовыми решениями:

Hibernate, первичный внешний ключ
Имеется такая база. Т.е. таблица Ordered_Goods содержит два первичных внешних ключа. Не подскажите как это реализовать с помощью...

Hibernate, составной ключ
Есть две таблицы: бригада и материал. Связь многие ко многим. Однако мне нужно не просто написать обыкновенный @ManyToMany мапинг, а так,...

Как сделать составной первичный ключ с пом. Hibernate (аннотация many-to-many)?
Здравствуйте. Подскажите пожалуйста как правильно делается составной первичный ключ с помощью Hibernate (в классе UserRole, который...

3
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
03.05.2013, 18:18
http://www.ibm.com/developerwo... ernatejpa/
вторая ссылка гугла по названию топика

могу посоветовать:
1) забить на составные ключи
2) забыть про варчаровые ПК и никогда больше не вспоминать
3) переархитектурить БД на ПК в виде бигинт(лонг, лонгинт)
4) поставить автоинкрементацию на ПК в БД и обучить этому хибер анотацией
5) не юзать ПК в бизнесс логике программы
1
9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74
03.05.2013, 19:01  [ТС]
ОК. Будем РМД переделовать
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
03.05.2013, 23:06
Цитата Сообщение от AckiyBolt Посмотреть сообщение
5) не юзать ПК в бизнесс логике программы
да это особенно неявный, но очень важный совет, поддерживаю
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2013, 23:06
Помогаю со студенческими работами здесь

Составной первичный ключ
Всем привет! С наступающим Новым годом! Никогда не сталкивался с составными первичными ключами, кто может помогите плиз. Вопрос такого...

Составной первичный ключ
OPEN DATABASE c:\gdisk\_institute\cs\sql\proj31\data31.dbc IF (TYPE('PRICE') == 'U') DROP TABLE PRICE ENDIF CREATE TABLE PRICE (; ...

Составной первичный ключ
Добрый день! Выполняю академическое задание - создание БД. Дата-логическая модель представлена на рисунке. В данной БД есть таблица в...

Составной первичный ключ
Доброго времени суток, вот есть такой вопрос. Как создать составной первичный ключ? вот имеется 2 таблици create or replace table...

Нужно создать составной первичный ключ
Здравствуйте. Нужна помощь по составлению первичного ключа к таблице в бд. Созданы следующие таблицы: TOVAR KTOV NTOV SORT 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru