Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вставка потенциально дублируемых записей. / 13 сообщений из 13, страница 1 из 1
05.07.2013, 09:44:35
    #38321430
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Добрый день!

Есть некая сущность TaggedObject у нее есть Set тегов Tag.

Ну и понятно что теги могут пересекаться у разных tagged objects.

То есть например taggedObjectOne имеет [tag1, tag2] а taggedObjectTwo имеет [tag1, tag3].

Если делать просто вставку "в лоб"

hibernateSession.save(taggedObjectOne);

hibernateSession.save(taggedObjectTwo);

получаем Exception гласящий что мол нарушено ограничение уникальности по имени тега.

Как разруливаются такие ситуации в best practices?
...
Рейтинг: 0 / 0
05.07.2013, 10:20:55
    #38321489
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
У вас tag1, вероятно, два разных объекта. А должен быть один.
...
Рейтинг: 0 / 0
05.07.2013, 13:37:53
    #38321834
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Blazkowicz,

В базе таблица есть допустим такая:

Код: sql
1.
table tags(tag_name varchar(10), unique(tag_name));



я об этом.
...
Рейтинг: 0 / 0
05.07.2013, 13:43:18
    #38321842
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
scymaksВ базе таблица есть допустим такая:

Я про объекты говорю, а не про базу.

У вас так:
Код: java
1.
2.
taggedObjectOne = new TaggedObject(new Tag("tag1"), new Tag("tag2"));
taggedObjectTwo = new TaggedObject(new Tag("tag1"), new Tag("tag3"));



Это и приводит к ошибке. Нужно сделать так:

Код: java
1.
2.
3.
4.
5.
6.
tag1 = new Tag("tag1");
tag2 = new Tag("tag2");
tag3 = new Tag("tag3");

taggedObjectOne = new TaggedObject(tag1, tag2);
taggedObjectTwo = new TaggedObject(tag1, tag3);


Тогда tag1 будет вставляться только один раз и ошибки не будет.
...
Рейтинг: 0 / 0
05.07.2013, 13:52:59
    #38321866
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Добрый день, scymaks!

> В базе таблица есть допустим такая:
>
> table tags(tag_name varchar(10), unique(tag_name));

А не надо так делать. Надо так (если я правильно понял правила описания
я таблиц в этом языке).

table tags(tag_name varchar(10), tagget_object_id number,
unique(tag_name, tagget_object_id));


--
Алексей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2013, 17:54:55
    #38322307
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
GKS_Samara,

Есть таблица tags .

Код: sql
1.
table tags(id, name)



Есть таблица domain_objects .

Код: sql
1.
table domain_objects(id, name, description)



Есть таблица tagged_objects .

Код: sql
1.
table tagged_objects(id, domain_object_id, tag_id)



Есть класс DomainObject у которого есть Set tags.
...
Рейтинг: 0 / 0
08.07.2013, 09:17:55
    #38323659
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Добрый день, scymaks!

> Есть класс DomainObject у которого есть Set tags.

Ну и?
DomainObjectTagSet, который в SQL содержит domainObjectId и tagId
(и уникальный ключ по паре), а в Java - две ссылки.
Можно это же сделать через @ManyToMany в DomainObject...

--
Алексей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.07.2013, 10:07:25
    #38323707
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Blazkowicz,

То есть при каждом добавлении Tag к Bug нужно залезть в базу, и достать тег с уже установленным id?
...
Рейтинг: 0 / 0
08.07.2013, 10:08:49
    #38323709
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
scymaksТо есть при каждом добавлении Tag к Bug нужно залезть в базу, и достать тег с уже установленным id?
Нафига в базу? Он и так в сессии лежит. Достать его из сессии ничего не стоит.
...
Рейтинг: 0 / 0
08.07.2013, 10:18:52
    #38323720
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Blazkowicz,

Не, а если приложение перезапускали?
...
Рейтинг: 0 / 0
08.07.2013, 10:41:29
    #38323748
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
scymaksНе, а если приложение перезапускали?
Чего? Какое это отношение имеет к первоначальному вопросу?
...
Рейтинг: 0 / 0
08.07.2013, 10:48:04
    #38323756
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
Blazkowicz,

Ну сессия же угробится. Нужно будет заново в базу лезть?
...
Рейтинг: 0 / 0
08.07.2013, 10:57:19
    #38323775
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка потенциально дублируемых записей.
scymaksНу сессия же угробится. Нужно будет заново в базу лезть?
Конечно. Если что-то уже сохранено в базе, то нужно его читать оттуда, а не завново создавать. Это, разве, не логично?
Если теги нещадно эксплуатируются, то можно настроить 2nd level кэш, где они осядут. Там же и переживут перезагрузку.
Кроме этого теги, такая штука, что можно их денормализовать и не парится.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вставка потенциально дублируемых записей. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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