Ребята, у меня следующая задача, мне нужно из трёх атрибутов сделать один, который и будет ID?
То есть как-то подписать эти три три атрибута, что бы при создании нового объекта, я мог получить такой же ID и сравнивать объекты только по id, а не по трём атрибутам.
У кого какие идеи?
База MySQL
Re: Hibernate, Id из нескольких колонок, в одной колонке?
От:
Аноним
Дата:
14.06.07 20:29
Оценка:
Здравствуйте, unkis, Вы писали:
U>Ребята, у меня следующая задача, мне нужно из трёх атрибутов сделать один, который и будет ID?
U>То есть как-то подписать эти три три атрибута, что бы при создании нового объекта, я мог получить такой же ID и сравнивать объекты только по id, а не по трём атрибутам. U>У кого какие идеи?
U>База MySQL
читал, что составной id тема плохая, и сам такого не использую.
Re[2]: Hibernate, Id из нескольких колонок, в одной колонке?
А>читал, что составной id тема плохая, и сам такого не использую.
Я как раз и не хочу делать составной ID, я хочу что бы мой id содержал в себе информацию о моих трёх атрибутов.
тоесть как бы кололнка под ID одна, но значения Id состоит из трёх атрибутов.
Re[3]: Hibernate, Id из нескольких колонок, в одной колонке?
От:
Аноним
Дата:
14.06.07 21:10
Оценка:
Здравствуйте, unkis, Вы писали:
А>>читал, что составной id тема плохая, и сам такого не использую.
U>Я как раз и не хочу делать составной ID, я хочу что бы мой id содержал в себе информацию о моих трёх атрибутов. U>тоесть как бы кололнка под ID одна, но значения Id состоит из трёх атрибутов.
Нет проблем.
1. Можно сделать тип у ID String и храни что хочешь.
2. Надо вместо generated сделать тип поля assigned
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
->
@Id
public String getId() {
return id;
}
Re[4]: Hibernate, Id из нескольких колонок, в одной колонке?
А>Нет проблем.
А>1. Можно сделать тип у ID String и храни что хочешь. А>2. Надо вместо generated сделать тип поля assigned
А> @Id А> @GeneratedValue(strategy = GenerationType.AUTO) А> public Long getId() { А> return id; А> }
->>
А> @Id А> public String getId() { А> return id; А> }
и по какому принципу тогда будет генерироваться мой ID?
Re: Hibernate, Id из нескольких колонок, в одной колонке?
Здравствуйте, unkis, Вы писали:
U>Ребята, у меня следующая задача, мне нужно из трёх атрибутов сделать один, который и будет ID?
U>То есть как-то подписать эти три три атрибута, что бы при создании нового объекта, я мог получить такой же ID и сравнивать объекты только по id, а не по трём атрибутам. U>У кого какие идеи?
А чем тебе не подходит @IdClass ?
Re[2]: Hibernate, Id из нескольких колонок, в одной колонке?
U>так @IdClass, скажет что три моих атрибута(три колонки являются моим ID), а мне надо чтобы отображалось всё в одной колонке, а не в трёхю
Да, три колонки в табле, но один составной Id для тебя. Чем это противоречит тому что ты писал U>То есть как-то подписать эти три три атрибута, что бы при создании нового объекта, я мог получить такой же ID и сравнивать объекты U>только по id, а не по трём атрибутам.
Re[4]: Hibernate, Id из нескольких колонок, в одной колонке?
S>Да, три колонки в табле, но один составной Id для тебя. Чем это противоречит тому что ты писал
Проблема в том хоть три эти колонки и будут ключами, проверка будет проводится по трём атрибутам, а мне надо чтобы проверка проводилась по одному.
К примеру у меня есть таблица с атрибутами A,B,C, так вот при создании новой записи надо сночало проверить существует ли такая запись в БД, тоесть проверить на соответствие каждого атрибута. Вот и получается проверка происходит по всем трём атрибутам.
Сейчас я делаю так, я в колонку ID этой таблицы, заношу суммарное значений трёх атрибутов, а именно id = A+"/"+B+"/"+C;
и в таком случаи, когда я создаю запись, я проверяю только по ID, тоесть только по одному атрибуту.
Re[5]: Hibernate, Id из нескольких колонок, в одной колонке?
Здравствуйте, unkis, Вы писали:
U>К примеру у меня есть таблица с атрибутами A,B,C, так вот при создании новой записи надо сночало проверить существует ли такая запись в БД, тоесть проверить на соответствие каждого атрибута. Вот и получается проверка происходит по всем трём атрибутам.
Если я тебя правильно понял, тебе нужно уникальность записи по A, B, C, так и объяви их сочетание уникальными и лови exception с базы.
@UniqueConstraint(columnNames={A,B,C})
Re[6]: Hibernate, Id из нескольких колонок, в одной колонке?
S>Если я тебя правильно понял, тебе нужно уникальность записи по A, B, C, так и объяви их сочетание уникальными и лови exception с базы. S>@UniqueConstraint(columnNames={A,B,C})
В принципе такой вариант тоже годится.
А как при помощи Hibernate, отлавливать это Excaption?
И потом, если несколько операций происходят в одной транзакции, то при отлови Exception всёравно будет происходит RollBack, или этого можно избежать?
Re[7]: Hibernate, Id из нескольких колонок, в одной колонке?
Здравствуйте, unkis, Вы писали:
S>>Если я тебя правильно понял, тебе нужно уникальность записи по A, B, C, так и объяви их сочетание уникальными и лови exception с базы. S>>@UniqueConstraint(columnNames={A,B,C}) U>В принципе такой вариант тоже годится.
U>А как при помощи Hibernate, отлавливать это Excaption?
в DAO U>И потом, если несколько операций происходят в одной транзакции, то при отлови Exception всёравно будет происходит RollBack, или этого можно избежать?
Как в DAO напишешь, так и будет
Re[8]: Hibernate, Id из нескольких колонок, в одной колонке?
U>>А как при помощи Hibernate, отлавливать это Excaption? S>в DAO U>>И потом, если несколько операций происходят в одной транзакции, то при отлови Exception всёравно будет происходит RollBack, или этого можно избежать?
S>Как в DAO напишешь, так и будет
извините, я только начинаю разбираться с Hibernate,
что такое DAO?
Как отловить Exception?
и как избежать RollBack?
можно примерчик.
Re[9]: Hibernate, Id из нескольких колонок, в одной колонке?
unkis wrote:
> Сейчас я делаю так, я в колонку ID этой таблицы, заношу суммарное > значений трёх атрибутов, а именно id = A+"/"+B+"/"+C; > и в таком случаи, когда я создаю запись, я проверяю только по ID, тоесть > только по одному атрибуту.
Сделай первичный ключ по трём колонкам. В чём проблема-то?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: Hibernate, Id из нескольких колонок, в одной колонке?
.>Сделай первичный ключ по трём колонкам. В чём проблема-то?
я уже писал, проблема в том что проверка по одному атрибуту, гораздо быстрее чем по трём, а мне очень важна скорость.
Re[7]: Hibernate, Id из нескольких колонок, в одной колонке?
Здравствуйте, unkis, Вы писали:
.>>Сделай первичный ключ по трём колонкам. В чём проблема-то? U>я уже писал, проблема в том что проверка по одному атрибуту, гораздо быстрее чем по трём, а мне очень важна скорость.
Используй тогда JDBC
Re[7]: Hibernate, Id из нескольких колонок, в одной колонке?
unkis wrote:
> .>Сделай первичный ключ по трём колонкам. В чём проблема-то? > я уже писал, проблема в том что проверка по одному атрибуту, гораздо > быстрее чем по трём, а мне очень важна скорость.
Кто сказал? Ты пробовал? Выборка в индексе по составному ключу работает так же, как и по обычному.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Hibernate, Id из нескольких колонок, в одной колонке?
Здравствуйте, unkis, Вы писали:
S>>Да, три колонки в табле, но один составной Id для тебя. Чем это противоречит тому что ты писал
U>Проблема в том хоть три эти колонки и будут ключами, проверка будет проводится по трём атрибутам, а мне надо чтобы проверка проводилась по одному.
U>К примеру у меня есть таблица с атрибутами A,B,C, так вот при создании новой записи надо сночало проверить существует ли такая запись в БД, тоесть проверить на соответствие каждого атрибута. Вот и получается проверка происходит по всем трём атрибутам.
U>Сейчас я делаю так, я в колонку ID этой таблицы, заношу суммарное значений трёх атрибутов, а именно id = A+"/"+B+"/"+C; U>и в таком случаи, когда я создаю запись, я проверяю только по ID, тоесть только по одному атрибуту.
не правильным путем идете, товарисч, когда вокруг советуют использовать чисто синтетические ключи с хибером!