9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74

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

03.05.2013, 17:44. Показов 10007. Ответов 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 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru