Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2

Hibernate: получение значений таблицы через третью таблицу

07.02.2017, 15:12. Показов 3694. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть три таблицы: "cars", "details" и "detail_car". У каждой таблицы есть id, у "detail_car" еще колонки car_id и detail_id.
Т.е. cars и details объединяются через таблицу "detail_car".
Как в моделе Car получить список details, принадлежащий именно этой машине?
Вот модель Car:
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
package ru.project.model;
 
import javax.persistence.*;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
 
@Entity
@Table(name="CARS")
public class Car {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
 
    @ManyToOne
    @JoinColumn(name="mark_id")
    private Mark mark;
 
    @ManyToOne
    @JoinColumn(name="model_id")
    private Model model;
 
    @Digits(integer=8, fraction=2)
    @Column(name = "year", nullable = false)
    private int year;
 
    @NotNull
    @Size(min=10, max=50)
    @Column(name = "img_url", nullable = false)
    private String imgUrl;
 
    @NotNull
    @Size(min=10, max=1000)
    @Column(name = "about", nullable = false)
    private String about;
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public Mark getMark() {
        return mark;
    }
 
    public void setMark(Mark mark) {
        this.mark = mark;
    }
 
    public Model getModel() {
        return model;
    }
 
    public void setModelId(Model model) {
        this.model = model;
    }
 
    public int getYear() {
        return year;
    }
 
    public void setYear(int year) {
        this.year = year;
    }
 
    public String getImgUrl() {
        return imgUrl;
    }
 
    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl;
    }
 
    public String getAbout() {
        return about;
    }
 
    public void setAbout(String about) {
        this.about = about;
    }
 
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }
 
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        Car other = (Car) obj;
        if (id != other.id)
            return false;
        return true;
    }
 
    @Override
    public String toString() {
        return mark.getMark() + " " + model.getModel() + " " + nick;
    }
}
Использую Hibernate.
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2017, 15:12
Ответы с готовыми решениями:

Внешний ключ через третью таблицу
Подскажите возможно ли такое сделать: Есть 3 таблицы 1 таблица HEAD: ID;Type 2 таблица POS: ID;Status; 3 таблица...

Получение таблицы значений функциональной зависимости
Получение таблицы значений функциональной зависимости. Напечатать таблицк перевода температуры из градусов по шкале Цельсия (oC) в...

Получение значений фильтра сводной таблицы
Коллеги, добрый день ! Есть сводная таблица на основе OLAP. --Доступа к самому OLAP нет, есть только сводная таблица. --У...

4
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
07.02.2017, 15:32
Лучший ответ Сообщение было отмечено Костяныч как решение

Решение

как вариант, воспользоваться маппингом.
Вот аналогичный пример - https://en.wikibooks.org/wiki/... ManyToMany
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
08.02.2017, 11:33  [ТС]
neske, спасибо.
Попробовал сделать так, как указанно в вашей ссылке.
Выпадает: Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationExcepti on' exception.
Сделал так:
Java
1
2
3
4
5
6
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "detail_car",
            joinColumns = @JoinColumn(name = "car_id"),
            inverseJoinColumns = @JoinColumn(name = "detail_id"))
    private Set<Detail> details;
Все равно не работает...
Сам скрипт таблицы:
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- Table: detail_car
 
-- DROP TABLE detail_car;
 
CREATE TABLE detail_car
(
  id INTEGER NOT NULL,
  detail_id INTEGER,
  car_id INTEGER,
  CONSTRAINT detail_avto_pkey PRIMARY KEY (id),
  CONSTRAINT detail_avto_detail_id_fkey FOREIGN KEY (detail_id)
      REFERENCES details (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT detail_car_car_id_fkey FOREIGN KEY (car_id)
      REFERENCES cars (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE detail_car
  OWNER TO test;
GRANT ALL ON TABLE detail_car TO test;
GRANT ALL ON TABLE detail_car TO PUBLIC;
Что я могу делать не правильно?

Добавлено через 1 час 22 минуты
При этом в консоли сервера печатается:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    SELECT
        this_.id AS id1_0_2_,
        this_.about AS about2_0_2_,
        this_.img_url AS img_url3_0_2_,
        this_.mark_id AS mark_id6_0_2_,
        this_.model_id AS model_id7_0_2_,
        this_.NICK AS NICK4_0_2_,
        this_.year AS year5_0_2_,
        mark2_.id AS id1_4_0_,
        mark2_.MARK AS MARK2_4_0_,
        model3_.id AS id1_5_1_,
        model3_.MODEL AS MODEL2_5_1_ 
    FROM
        CARS this_ 
    LEFT OUTER JOIN
        Marks mark2_ 
            ON this_.mark_id=mark2_.id 
    LEFT OUTER JOIN
        Models model3_ 
            ON this_.model_id=model3_.id 
    WHERE
        this_.id=?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
13.02.2017, 12:27
Костяныч, если проблема еще актуальна, покажите маппинг всех трех таблиц
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
13.02.2017, 12:29  [ТС]
neske, уже решил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.02.2017, 12:29
Помогаю со студенческими работами здесь

График php, получение значений из таблицы
Здравствуйте, столкнулся с проблемой - нужно нарисовать график по двум переменным. Есть запрос на php include...

Получение таблицы значений функциональной зависимости
Хранилище для сырья в форме цилиндра с радиусом 2,5 м, заполняется по высоте от 0 до 3,5 м. Напечатать таблицу зависимости объема сырья в...

Получение значений из TextBox находящегося в ячейке таблицы
Добрый день форумчане! Проблема такая, создается динамически таблица в ячейках которой создаются TextBox(ы). Вопрос: как получить данные из...

Из таблицы в таблицу значений
Привет Всем! У меня возник такой вопрос: Можно-ли как нибудь выгрузить данные из таблицы в таблицу значений?

Получение значений по значению полученному из другой таблицы в одном запросе
Привет! Есть 2 таблицы: COLOR: id | color NEGATIVE: id_color | id_negative | status id_color и id_negative - связаны с id...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru