powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate мапинг с фильтром
25 сообщений из 49, страница 1 из 2
Hibernate мапинг с фильтром
    #38540410
Есть 2 сущности Product и Properties.
Товар и его свойства.
Периодически свойства товара меняются, но разные люди работают с разными, так сказать версиями товара.
Т.е. на складе есть товар версии1 со своими свойствами и товар версии2 со своими совйствами.
Для этого в Product и в Properties добавили поле version.
И разные люди должны при выборке "Покажи товар c ID=3, версии 1" и "Покажи товар с ID=3, версии 2", получить Product с соответствующими фильтрами.
Пока все было маленькое и использовали обычный SQL, все было хорошо. Просто в запрос добавлялся условие по версии, все работало.
Но теперь такое надо сделать в Hibernate.

Для любителей порассуждать на тему правильных сферических коней в вакууме поясню. Это не реальный пример, просто воспроизведена техническая ситуация.

Так вот, как в мапинг @ManyToOne для Properties, добавить условие, что версия Properties должна быть равна версии Product?

Код: 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.
@Entity
@Table(name = "properties")
public class Properties {
    @ManyToOne( fetch = FetchType.LAZY )
    @JoinColumn( name = "product_id" )
    private Product product;

    @Column( name = "version" )
    private int version;
}

@Entity
@Table(name = "product")
@NamedQueries({
        @NamedQuery(name = "get.product.by.ver",
                query = "SELECT q " +
                        "FROM Product p " +
                        "WHERE p.version = :version ")
})
public class Product {
    @OneToMany( fetch = FetchType.LAZY, mappedBy = "product" )
    private List<Properties> properties = new ArrayList<>();

    @Column( name = "version" )
    private int version;
}



В запросе NamedQuery, легко добавляется параметр версия. Но при этом в список пропертей, попадают проперти от всех версий. Как туда тоже добавить фильтр по версии?
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540414
Да, забыл сказать. Envers хибернейтовский не канает, по самым разным причинам. Его уже рассматривали.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540443
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас есть некоторая бизнес-логика, связаная с версионностью структуры.
В чем глубинный смысл зашивать эту бизнес-логику в слой работы ORM, а не реализовать отдельным наружным слоем, оставив ORM лишь инструментом работы с моделью заданной БД?
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540447
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
+1
аффтра. Вы сказали, что раньше - работало. Покажите модель БД когда работало.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540471
BlazkowiczУ вас есть некоторая бизнес-логика, связаная с версионностью структуры.
В чем глубинный смысл зашивать эту бизнес-логику в слой работы ORM, а не реализовать отдельным наружным слоем, оставив ORM лишь инструментом работы с моделью заданной БД?
Т.е. как это в чем смысл? Надо же хранить версии и работать с ними.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540478
Petro123Blazkowicz,
+1
аффтра. Вы сказали, что раньше - работало. Покажите модель БД когда работало.

Оно не когда-то работало, оно и сейчас работает. Без хибернейта.
Но вот опять. Не надо обсуждать модель. Это не реальный пример, выдумка, фантазии... не знаю как еще это объяснить...
Пример привел просто чтобы показать техническую проблему, а не архитектуру.
Вопрос был не "как мне сделать версионность", а "как за мапить с доп условиями".
Зачем флудить, уходя в дебри не заданного вопроса?
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540479
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий ЗнанияНадо же хранить версии и работать с ними.
вам не уйти от "сферического коня" по вашему определению.
- зачем хранить?
- как работать?
- почему именно версия товара? IMHO коряво выглядит этот термин.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540482
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знанияа "как за мапить с доп условиями".
хибер маппит Реальную БД и таблицы.
Т.е. DAO зеркало БД.
А потом в сервисном слое подменяй свои версии объектов.
IMHO об этом тебе и было сказано.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540485
Petro123Ищущий ЗнанияНадо же хранить версии и работать с ними.
вам не уйти от "сферического коня" по вашему определению.
- зачем хранить?
- как работать?
- почему именно версия товара? IMHO коряво выглядит этот термин.

Ну вы даете))
1. Как это зачем хранить? Ну вот бизнесу надо хранить версии... мне им сказать чтоб не хотели и выкинули базу за последние несколько лет с версиями?

2. Как работать вопрос не стоит. Уже работают и проблем с этим нет.

3. Может название и корявое, но отражает реальность. Это изменения свойств объекта во времени. Все привыкли называть это версиями. Не вижу тут никакой проблемы.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540489
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO почти твоя модель, т.к. ты ничего не привёл кроме общих фраз:
Из этой модели:
http://www.sql.ru/forum/954709-1/shema-spravochnika-tovarov-i-atributov?hl=???????? ??????
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
Аспирин
+- Аспирин 10
|  +- Аспирин Россия
|  |  +- Аспирин московский
|  |  +- Аспирин пермский
|  +- Аспирин заграничный
|     +- Аспирин У ПСА
|     +- Аспирин байеровский
+- Аспирин растворимый


в твою версию модели
Аспирин
+- Аспирин 10
| +- Аспирин Россия
| | +- Аспирин версии1
| | +- Аспирин версии2

Ты схему БД так и не привёл
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540491
Petro123Ищущий Знанияа "как за мапить с доп условиями".
хибер маппит Реальную БД и таблицы.
Т.е. DAO зеркало БД.
А потом в сервисном слое подменяй свои версии объектов.
IMHO об этом тебе и было сказано.

Может конкретно описать, безо всяких заклинаний типа "сделай DAO в сервисе"?
Вы предлагаете извлекать связанные таблицы не хибернейтом, а руками?
Сначала выбирать товар, потом отдельно выбирать проперти к нему и руками их соединять, отказавшись от мапинга в хибернейте?
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540494
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знаниябизнесу надо хранить версии... мне им сказать чтоб не хотели и выкинули базу за последние несколько лет с версиями?
смешно.
Если "хранить" - термин от бизнеса , то есть - OLAP\OLTP бэкапы и СиДиРОМы наконец))
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540499
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий ЗнанияМожет конкретно описать,
As Is To Be - дай схему и запросы КАК РАБОТАЛО
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540503
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
либо выбери другой пример. Например - СЭД и версии документов.
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540504
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-правильному, если в продукте раньше был ключ product_id, то теперь он должен стать составным (product_id, version), то же относится и к внешнему кючу в Properties. В хибернейте для этого создают специальный класс, в учебнике всё подробно расписано.
Судя по тому, что нарисовано, ключ так и остался product_id, то есть ваша таблица сейчас даже не во 2 нормальной форме. Хибернейт с такими таблицами работать не может, разве что с применением костылей.
Сделайте нормальный меппинг ключей и всё заработает
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540519
Petro123IMHO почти твоя модель, т.к. ты ничего не привёл кроме общих фраз:
Т.е. конкретный код, который я привел это "ничего" ?
Он полностью описывает ситуацию. Там всего 2 таблицы с двумя полями.

Ну ладно, в базе будет так:
Product
- Аспирин версии1
- Аспирин версии2
- Аспирин версии3

Properties
- Свойство 1, Аспирин версии1
- Свойство 2, Аспирин версии1
- Свойство 1, Аспирин версии3
- Свойство 2, Аспирин версии3
- Свойство 3, Аспирин версии3

Никаких деревьев там нет.
Без хибернейта делается просто join табличек с фильтром по версии.
Но опять же, зачем это? Вопрос был не архитектурный.
Вопрос чисто по хибернейту, как добавить в мапинг табличек доп условие по полю...
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540526
Petro123Ищущий Знаниябизнесу надо хранить версии... мне им сказать чтоб не хотели и выкинули базу за последние несколько лет с версиями?
смешно.
Если "хранить" - термин от бизнеса , то есть - OLAP\OLTP бэкапы и СиДиРОМы наконец))
Действительно смешно...
Кто хранит справочник товаров в бекапе на сидироме?
Хватит стебаться уже...
Если нечего сказать по делу, лучше не надо флудить и показывать какой вы "умный"...
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540532
ivanraПо-правильному, если в продукте раньше был ключ product_id, то теперь он должен стать составным (product_id, version), то же относится и к внешнему кючу в Properties. В хибернейте для этого создают специальный класс, в учебнике всё подробно расписано.
Судя по тому, что нарисовано, ключ так и остался product_id, то есть ваша таблица сейчас даже не во 2 нормальной форме. Хибернейт с такими таблицами работать не может, разве что с применением костылей.
Сделайте нормальный меппинг ключей и всё заработает

Спасибо.
Хоть кто-то пишет по делу...
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540545
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий ЗнанияivanraПо-правильному, если в продукте раньше был ключ product_id, то теперь он должен стать составным (product_id, version), то же относится и к внешнему кючу в Properties. В хибернейте для этого создают специальный класс, в учебнике всё подробно расписано.
Судя по тому, что нарисовано, ключ так и остался product_id, то есть ваша таблица сейчас даже не во 2 нормальной форме. Хибернейт с такими таблицами работать не может, разве что с применением костылей.
Сделайте нормальный меппинг ключей и всё заработает

Спасибо.
Хоть кто-то пишет по делу...
да.
Привели бы схему БД с ID - давно бы всё было ясно.
Упрямый))
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540548
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так работать будет?
@ManyToOne
@JoinColumns({
@JoinColumn(name = "product_id", referencedColumnName="ID"),
@JoinColumn(name="version", referencedColumnName="version")
})
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540737
PsolaoА так работать будет?
@ManyToOne
@JoinColumns({
@JoinColumn(name = "product_id", referencedColumnName="ID"),
@JoinColumn(name="version", referencedColumnName="version")
})

Неа, так не работает, уже попробовал. Говорит не может быть 2 поля "version".
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540739
Petro123да.
Привели бы схему БД с ID - давно бы всё было ясно.
Упрямый))

Для тех кто реально может помочь, все понятно.
А тем кто только и умеет что выпячивать собственную значимость, всегда что-то мешает... про танцора ведь в курсе? ;)
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540774
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий ЗнанияPsolaoА так работать будет?
@ManyToOne
@JoinColumns({
@JoinColumn(name = "product_id", referencedColumnName="ID"),
@JoinColumn(name="version", referencedColumnName="version")
})

Неа, так не работает, уже попробовал. Говорит не может быть 2 поля "version".

Все нормально - убери из основного класса поле version
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540784
PsolaoВсе нормально - убери из основного класса поле version
Я чего-то не понимаю... Если я уберу это поле из основного класса, то как я буду узнавать его версию?
...
Рейтинг: 0 / 0
Hibernate мапинг с фильтром
    #38540796
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знания,
чукча не читатель.
Маппинг всегда 2 стороны - Код Java и схема БД.
Изучай-ищи дальше), я не против).
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate мапинг с фильтром
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]