Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 24

Hibernate, первичный внешний ключ

07.04.2015, 22:15. Показов 5164. Ответов 16
Метки нет (Все метки)

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


Имеется такая база. Т.е. таблица Ordered_Goods содержит два первичных внешних ключа.
Не подскажите как это реализовать с помощью hibernate (аннотаций)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2015, 22:15
Ответы с готовыми решениями:

Hibernate. Составной первичный ключ
Доброго времени суток! Есть проблемка с созданием индифицирующего составного ключа. Есть две таблицы "Types" и...

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

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

16
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.04.2015, 22:53
создать таблицу Ordered_Goods и замапить её @OneToMany к двум другим
0
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 24
07.04.2015, 23:09  [ТС]
в этом случае разве таблица Ordered_Goods не должна содержать свой id, по мимо внешних?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.04.2015, 00:13
Кэти, если хотите можете не создавать. Однако каждая таблица должна иметь id если это не чистая таблица-связь. В вашем случае есть ещё одно поле поэтому id присутствовать должен.
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
18.05.2015, 20:26
а если у меня только 2 поля, 1 в одну таблицу ссылается, второе в другую. как тогда создавать сущность в Hibernate?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2015, 20:32
vvApache, ненадо ничего создавать. Сущность вам ненужна, а таблицу хайбернейт сам создаст на основе аннотации @ManyToMany
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
18.05.2015, 21:22
ээ, а как я с этой составной таблицей буду работать тогда?
опишу подробнее:

есть таблица 1 object_types:
с полями
object_type_id PK
name
...

есть таблица 2 attributes:
с полями
attr_id PK
name
...

и 3я составная таблица attr_object_types которую у меня не получается описать в Hibernate:
object_type_id
attr_id
оба этих поля являются FK к первым двум таблицам
я пробовал сделать что-то такое, но он показывает всё красным, говорит мол нужен primary key
Кликните здесь для просмотра всего текста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.netcraft.hibernate.composite;
 
import javax.persistence.Embeddable;
import java.io.Serializable;
 
@Embeddable
public class AttrObjectTypeComposite implements Serializable {
    private long attr_id;
    private long object_type_id;
 
    public AttrObjectTypeComposite() {
    }
 
    public AttrObjectTypeComposite(long attr_id, long object_type_id) {
        this.attr_id = attr_id;
        this.object_type_id = object_type_id;
    }
 
    public long getAttr_id() {
        return attr_id;
    }
    public void setAttr_id(long attr_id) {
        this.attr_id = attr_id;
    }
    public long getObject_type_id() {
        return object_type_id;
    }
    public void setObject_type_id(long object_type_id) {
        this.object_type_id = object_type_id;
    }
}
 
 
 
 
 
package com.netcraft.model;
 
import javax.persistence.*;
import java.io.Serializable;
import com.netcraft.hibernate.composite.AttrObjectTypeComposite;
 
@Entity
@Table(name="attr_object_types")
@IdClass(AttrObjectTypeComposite.class)
public class AttrObjectType implements Serializable{
 
    @Id
    @AttributeOverrides({
            @AttributeOverride(name="attrId", @Column(name="attr_id"))
            @AttributeOverride(name="objectTypeId", @Column(name="object_type_id"))
    })
 
    private long object_type_id;
    private long attr_id;
 
 
    public AttrObjectType() {
    }
 
    public AttrObjectType(AttrObjectTypeComposite attrObjectTypeComposite) {
        this.attr_id = attrObjectTypeComposite.getAttr_id();
        this.object_type_id = attrObjectTypeComposite.getObject_type_id();
    }
 
    public long getAttr_id() {
        return attr_id;
    }
    public void setAttr_id(long attr_id) {
        this.attr_id = attr_id;
    }
 
    public long getObject_type_id() {
        return object_type_id;
    }
    public void setObject_type_id(long object_type_id) {
        this.object_type_id = object_type_id;
    }
}


Добавлено через 7 минут
p.s. у меня прям как на таблице у ТС схема, только два поля вместо трёх в центральной таблице

Добавлено через 6 минут
p.p.s. нашёл почти идентичный пример:
http://www.dzone.com/tutorials... ons-1.html
вы это имели ввиду?
Java
1
2
3
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name =
...
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2015, 22:09
Цитата Сообщение от vvApache Посмотреть сообщение
вы это имели ввиду?
нет. Я имел в виду именно то что я написал выше. Я не писал ничего про @OneToMany
1
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
19.05.2015, 08:37
Загуглил вашу аннтонацию. Получается должно быть такое?:
http://www.mkyong.com/hibernat... nnotation/
Я на работе, сейчас не смогу проверить к сожалению
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
19.05.2015, 09:36
Цитата Сообщение от vvApache Посмотреть сообщение
Загуглил вашу аннтонацию. Получается должно быть такое?
да.
1
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
19.05.2015, 19:10
Сделал как в примере, получил ошибку:
Кликните здесь для просмотра всего текста
Java
1
2
...(много внешних эксепшнов) .... 
 nested exception is org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: attributes, for columns: [org.hibernate.mapping.Column(objectTypes)]


классы сущностей:
Кликните здесь для просмотра всего текста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.netcraft.model;
 
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
 
@Entity
@Table(name = "attributes")
public class Attribute implements Serializable{
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long attr_id;
 
    @Column
    private long attr_type_id;
    @Column
    private String name;
 
 
    private Set<ObjectType> objectTypes = new HashSet<ObjectType>(0);
 
    public Attribute() {
    }
 
    public Attribute(long attr_type_id, String name, Set<ObjectType> objectTypes) {
 
        this.attr_type_id = attr_type_id;
        this.name = name;
        this.objectTypes = objectTypes;
    }
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
 
    public long getAttr_type_id() {
        return attr_type_id;
    }
    public void setAttr_type_id(long attr_type_id) {
        this.attr_type_id = attr_type_id;
    }
 
    public long getAttr_id() {
        return attr_id;
    }
    public void setAttr_id(long attr_id) {
        this.attr_id = attr_id;
    }
 
    @ManyToMany(mappedBy = "attributes")
    public Set<ObjectType> getObjectTypes() {
        return this.objectTypes;
    }
 
    public void setObjectTypes(Set<ObjectType> objectTypes) {
        this.objectTypes = objectTypes;
    }
}


Кликните здесь для просмотра всего текста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.netcraft.model;
 
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
 
@Entity
@Table(name = "object_types")
public class ObjectType implements Serializable{
 
    @Id
    @Column
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long object_type_id;
 
    @Column
    private String name;
    @Column
    private long parent_id;
 
    private Set<Attribute> attributes = new HashSet<Attribute>(0);
 
    public ObjectType() {
    }
 
    public ObjectType(Set<Attribute> attributes, String name, long parent_id) {
 
        this.attributes = attributes;
        this.name = name;
        this.parent_id = parent_id;
    }
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
 
    public long getObject_type_id() {
        return object_type_id;
    }
    public void setObject_type_id(long object_type_id) {
        this.object_type_id = object_type_id;
    }
 
    public long getParent_id() {
        return parent_id;
    }
    public void setParent_id(long parent_id) {
        this.parent_id = parent_id;
    }
 
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "attr_object_types", joinColumns = {
            @JoinColumn(name = "object_type_id", referencedColumnName="object_type_id") },
            inverseJoinColumns = { @JoinColumn(name = "attr_id",
                    referencedColumnName="attr_id") })
    public Set<Attribute> getAttributes() {
        return this.attributes;
    }
 
    public void setAttributes(Set<Attribute> attributes) {
        this.attributes = attributes;
    }
}



Скомпилировалось нормально, однако перед компиляцией показывал ошибку на строку с:
@ManyToMany(mappedBy = "attributes")
public Set<ObjectType> getObjectTypes() {
return this.objectTypes;
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
19.05.2015, 21:40
vvApache, гуглите ошибку
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
20.05.2015, 14:22
да, глупая ошибка. суть в том что если пишешь аннотации над полями, то пиши везде над полями, если над геттерами - то везде над геттерами, мешать нельзя
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
20.05.2015, 15:01
vvApache, это так. Я посмотрел у вас вроде везде над геттерами были поэтому подумал что ошибка в другом
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
20.05.2015, 21:14
а если у меня в таблице посередине будут поля помимо связующих?
то есть два внешних ключа, и пара значений
без первичного ключа не обойтись?

Добавлено через 45 минут
или написать составной ключ?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
20.05.2015, 21:26
Цитата Сообщение от vvApache Посмотреть сообщение
а если у меня в таблице посередине будут поля помимо связующих?
это был вопрос у ТС первым постом.
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
21.05.2015, 12:00
вот такую связь я хочу сделать
http://www.codeuml.com/getimag... ba9fca1275
как получать значение value?

p.s. ок сделаю ключ... составной, если не получится придётся праймари сделать(

Добавлено через 1 час 37 минут
ну в общем всё написал. почти взлетело. пишет ошибку:
Java
1
org.hibernate.MappingException: Repeated column in mapping for entity: com.netcraft.model.Param column: attr_id (should be mapped with insert="false" update="false")
В гугле сказали надо маппить не по айди а по энтити классу, типо того:
Java
1
2
3
4
public class CompanyName implements Serializable {
//...
@JoinColumn(name = "COMPANY_ID", referencedColumnName = "COMPANY_ID", insertable = false, updatable = false)
private Company company;
Так ли это?
Вот собственно мой композитный класс:
Кликните здесь для просмотра всего текста
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
49
50
51
52
53
package com.netcraft.model;
 
import com.netcraft.hibernate.composite.ParamPK;
 
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
 
@Entity
@Table(name="params")
public class Param {
    @EmbeddedId
    ParamPK paramPK;
 
    @Column
    private long attr_id;
    @Column
    private long object_id;
    @Column
    private String value;
    @Column
    private Date date_value;
 
    public Date getDate_value() {
        return date_value;
    }
    public void setDate_value(Date date_value) {
        this.date_value = date_value;
    }
 
    public long getAttr_id() {
        return attr_id;
    }
    public void setAttr_id(long attr_id) {
        this.attr_id = attr_id;
    }
 
    public long getObject_id() {
        return object_id;
    }
    public void setObject_id(long object_id) {
        this.object_id = object_id;
    }
 
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}


Добавлено через 12 часов 46 минут
попробовал через сущность, попробовал через ManyToOne, та же ошибка -
Java
1
org.hibernate.MappingException: Repeated column in mapping for entity: com.netcraft.model.Param column: attr_id (should be mapped with insert="false" update="false")
Добавлено через 10 минут
хм, любопытно. поставил insertable = false, updatable = false на этот раз заработало, видимо надо использовать в связке с ManyToOne.
Но теперь в jsp выводится только через парентовый объект - как свойство от сущности Object.
Если пытаюсь передать в jsp напрямую сущность Param то он ничего не выводит. Хотя в логах из контроллера показывает что всё ок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2015, 12:00
Помогаю со студенческими работами здесь

Внешний ключ в Hibernate
Доброе время суток. POJO @Entity @NamedQuery(name = &quot;allOpers&quot;, query = &quot;SELECT o FROM Opers o&quot;) public class Opers { @Id ...

Первичный ключ заполнен в одной таблице норм, он же в другой таблице внешний NULL
Всем доброго времени суток! Проблема следующая: Использую &quot;SQL server management studio 2012&quot;, есть бекап базы данных с которой...

Замена данных в таблице по связи Первичный ключ - Вторичный ключ
Есть главная таблица и есть от нее зависимая. Требуется: чтоб в зависимую таблицу, в колонку вторичного ключа - подставились данные из...

Первичный ключ
Существует некоторый архив, в котором содержатся дела. У каждого дела, есть свой номер.......который и можно использовать в качестве...

Первичный ключ
как сделать так чтобы первичный ключ наращивался автоматически или имел разные значения при добавлении в базу данных?


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
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