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

Объединение нескольких таблиц используя Hibernate annotation

31.12.2013, 03:31. Показов 4817. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Я хочу сделать Join 3 таблиц сразу используя аннотации, но что то у меня не получается.
У меня есть 3 сущности, их код я привожу ниже.
Я хочу создать таблицу "users_estimates_photo" в которой будут хранится estimation_id и user_id.
Когда я делаю
Java
1
estimation.setUser(user)
запись идет. Но когда я в таблицу "estimates_photo", в которой буду хранится "estimation_id" и "photo_id", запись никак не проходит, всегда кидает java.sql.SQLException: Field 'users_estimaties_photo_id' doesn't have a default value. Я создавал таблицу без этой колонки, она добавляется автоматом, не могу понять почему.

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.selfmash.model;
 
import java.io.Serializable;
import java.util.List;
import java.util.Set;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
 
@Entity
@Table(name = "selfshots")
public class Photo implements Serializable {
 
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true)
    private int id;
 
    @Column(name = "name", nullable = false)
    private String name;
 
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "users_photos", joinColumns = { @JoinColumn(name = "photo_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") })
    private User user;
 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "estimates_photo", joinColumns = { @JoinColumn(name = "photo_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "estimation_id", referencedColumnName = "id") })
    private Set<Estimation> estimations;
 
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
 
    /**
     * @param id
     *            the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
 
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
 
    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
 
    /**
     * @return the user
     */
    public User getUser() {
        return user;
    }
 
    /**
     * @param user
     *            the user to set
     */
    public void setUser(User user) {
        this.user = user;
    }
 
    /**
     * @return the estimations
     */
    public Set<Estimation> getEstimations() {
        return estimations;
    }
 
    /**
     * @param estimations
     *            the estimations to set
     */
    public void setEstimations(Set<Estimation> estimations) {
        this.estimations = estimations;
    }
 
}
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.selfmash.model;
 
import java.io.Serializable;
import java.util.Set;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
 
@Entity
@Table(name = "users")
public class User implements Serializable {
 
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
 
    @Id
    @GeneratedValue
    @Column(name = "id")
    private Integer id;
 
    @Column(name = "login")
    private String login;
 
    @Column(name = "password")
    private String password;
 
    @Column(name = "name")
    private String name;
 
    @Column(name = "lastname")
    private String lastname;
 
    @Column(name = "email")
    private String email;
 
    @OneToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "user_roles", joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") })
    private Role role;
 
    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "users_photos", joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "photo_id", referencedColumnName = "id") })
    private Set<Photo> selfShot;
 
    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "users_estimates_photo", joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "estimation_id", referencedColumnName = "id") })
    private Set<Estimation> estimation;
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public Role getRole() {
        return role;
    }
 
    public void setRole(Role role) {
        this.role = role;
    }
 
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
 
    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
 
    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }
 
    /**
     * @param email
     *            the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }
 
    /**
     * @return the lastname
     */
    public String getLastname() {
        return lastname;
    }
 
    /**
     * @param lastname
     *            the lastname to set
     */
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
 
    /**
     * @return the selfShot
     */
    public Set<Photo> getSelfShot() {
        return selfShot;
    }
 
    /**
     * @param selfShot
     *            the selfShot to set
     */
    public void setSelfShot(Set<Photo> selfShot) {
        this.selfShot = selfShot;
    }
 
    /**
     * @return the estimation
     */
    public Set<Estimation> getEstimation() {
        return estimation;
    }
 
    /**
     * @param estimation
     *            the estimation to set
     */
    public void setEstimation(Set<Estimation> estimation) {
        this.estimation = estimation;
    }
 
}
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package com.selfmash.model;
 
import java.io.Serializable;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
 
@Entity
@Table(name = "estimation")
public class Estimation implements Serializable {
 
    /**
     * 
     */
    private static final long serialVersionUID = 2564183876125611370L;
 
    @Id
    @Column(name = "id", unique = true)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
 
    @Column
    private float estimation;
 
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "users_estimates_photo", joinColumns = { @JoinColumn(name = "estimation_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") })
    private User user;
 
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "estimates_photo", joinColumns = { @JoinColumn(name = "estimation_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "photo_id", referencedColumnName = "id") })
    private Photo photo;
 
    public Estimation() {
        // TODO Auto-generated constructor stub
    }
 
    public Estimation(float estimation) {
        this.estimation = estimation;
    }
 
    /**
     * @return the estimation
     */
    public float getEstimation() {
        return estimation;
    }
 
    /**
     * @param estimation
     *            the estimation to set
     */
    public void setEstimation(float estimation) {
        this.estimation = estimation;
    }
 
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
 
    /**
     * @param id
     *            the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
 
    /**
     * @return the users
     */
    public User getUser() {
        return user;
    }
 
    /**
     * @param users
     *            the users to set
     */
    public void setUser(User user) {
        this.user = user;
    }
 
    /**
     * @return the photos
     */
    public Photo getPhoto() {
        return photo;
    }
 
    /**
     * @param photos
     *            the photos to set
     */
    public void setPhoto(Photo photo) {
        this.photo = photo;
    }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.12.2013, 03:31
Ответы с готовыми решениями:

ManyToOne Hibernate Annotation
В общем, нужно создать отношение ManyToOne класса Car к классу Brand Вот класс Car @Entity @SequenceGenerator(name =...

PostgresSQL + Hibernate (many-to-many, annotation) - операция delete
всем привет! все переискал, перепробовал различные виды каскадов, но безрезультатно. не могу корректно удалить entity. классическая...

Связка таблиц Hibernate
Добрый день, столкнулся вот с какой проблемой. У меня есть 2 сущности: Folder и File. Получается Файл может находится в какой-либо папке,...

2
138 / 7 / 1
Регистрация: 31.03.2015
Сообщений: 395
26.01.2019, 02:32
У меня аналогичная проблема - 2 entity classes - связаны двусторонним m:m отношением - в режиме update
создается три таблицы, кроме двух основных и стыковочная.
Все рест-запросы работает после конечно некоторых коректировок.
Но работают при @GeneratedValue(strategy = GenerationType.AUTO) - не заметил и так создал таблицы,
и их заполнял. Но потом стало очевидно что id - общее для двух основных таблиц.
Поменял - на @GeneratedValue(strategy = GenerationType.IDENTITY) -
і post (create) рест-запрос возвращает could not execute statement; nested exception is org.hibernate.exception.GenericJDBCExcep tion: could not execute statement" -
в то же время в логах эклипса выщеприведеное значение -
java.sql.SQLException: Field 'id' doesn't have a default value

Как установить это дефолтное значение, и для чего оно?
Таблицы работают в режиме апдейта их структуры а данные остаются -
разве еще какую то анотацию добавить?
Теперь есть сомнение что даже при новом создание бд (то есть таблиц) -
все заработает!

Добавлено через 7 минут
Возле трех моих таблиц в mysql workbench еще есть hiberante_sequence
таблица. Может дело в ней?!
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
31.01.2019, 12:12
arts1, зачем некрофилить темы? создавай новые
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2019, 12:12
Помогаю со студенческими работами здесь

Hibernate и join нескольких таблиц
Добрый вечер. Есть три класса. Юзер, роль, бонус. Нужно связать через хибернейт все воедино. В Юзере прописана связь многие ко многим и...

Hibernate Annotation
Помогите связать таблицы : билеты на самолет, билеты на поезд, пассажир, купленные билеты. какие связи использовать (OneToMany, ManyToMany)?

Объединение нескольких таблиц
Здравствуйте, делаю базу по продажам комплектующих для ПК. Для удобства просмотра информации сделал для каждого вида комплектующих...

Объединение нескольких таблиц
Доброго времени суток, товарищи. Помогите разобраться с БД. Необходимо создать объединение нескольких таблиц(результатом должна быть...

Объединение нескольких таблиц
Доброго всем дня! Есть несколько таблиц с разным набором данных, например: Лицо (фамилия,имя ,отчество); Адрес (Город, улица, дом,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru