|
|
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. пример из доки для хибера я ставлю также на Heart.id @GeneratedValue чтоб вручную не указывать id, вылезает ошибка требуется вручную указать Id для Body. Делаю наоборот получаю ошибку наоборот. Все работает если проставить @generatedvalue на обе id обеих сущностей. Как удостовериться что id генерируются одинаковые? то есть конешно можно попробовать сделать heart закоммитить чтобы он получил Id затем назначить его id к Body а затем закоммить Body. Но сама идея @OneToOne чтобы сохранять только Body а HEart автоматом будет к нему приязываться. Как я понял при создании Body должно автоматически создаваться и Heart и они должны связываться. чего здесь и не происходит меня интересует случай the associated entities share the same primary keys values один из которых должен быть generated ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 12:09:25 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
foreign_key не создается :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 12:10:15 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Generated на Body надо было: http://devblog.point2.com/2009/11/14/basic-hibernate-onetoone-primarykeyjoincolumn-example-with-maven-and-mysql/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 12:14:14 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
llemingforeign_key не создается :( Это здесь при чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 12:14:29 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
either the associated entities share the same primary keys values, a foreign key is held by one of the entities (note that this FK column in the database should be constrained unique to simulate one-to-one multiplicity) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 12:29:24 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, смешно но я его как раз счас читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 12:30:25 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
то есть кому надо поставить @generatedvalue поставить Body или Heart/ никак не могу понять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 13:27:37 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
llemingто есть кому надо поставить @generatedvalue поставить Body или Heart/ никак не могу понять Вы одному уже поставили. Не заработало. Поставьте другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 13:46:55 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Blazkowiczllemingто есть кому надо поставить @generatedvalue поставить Body или Heart/ никак не могу понять Вы одному уже поставили. Не заработало. Поставьте другому. попробовал но теперь Heart always null. Whatever I do it is null. я их вот так сохраняю Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 14:36:14 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
проблема вот здесь Это то что у меня Hibernate: create table Body (id bigint not null auto_increment, name varchar(255), primary key (id)) ENGINE=InnoDB Hibernate: create table Heart (id bigint not null, rate integer not null, primary key (id)) ENGINE=InnoDB Это то что должен хибер делать согласно приведенной вами ссылке http://devblog.point2.com/2009/11/14/basic-hibernate-onetoone-primarykeyjoincolumn-example-with-maven-and-mysql/ CREATE TABLE Body ( id BIGINT NOT NULL AUTO_INCREMENT, name varchar(255), PRIMARY KEY (id)) TYPE = INNODB; CREATE TABLE Heart ( id BIGINT NOT NULL, heartrate bigint , PRIMARY KEY(id), INDEX (id), FOREIGN KEY (id) REFERENCES Body (id) ) TYPE = INNODB; это что получается, хибер не умеет создавать foreign_keys ? судя по логам от хибера он создает полностью разделенные сущности т. е. @OneToMany и @PrimareKeyJoinColumn игнорируются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 14:44:39 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Хибер вообще не умеет создавать таблицы. Генерация таблиц это исключительно для чернового наброска. Хибер никогда вам не сгенерирует правильно все возможные констрейнты. Для продакшн систем таблицы создавать только самостоятельно. Клевое подспорье - liquibase. Hibernate Tools и Hibernate ORM это вообще два разных инструмента. Зачем вы их в кучу мешаете в одном вопросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 15:09:56 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за прояснение. просветлело наконец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 15:25:42 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
BlazkowiczХибер вообще не умеет создавать таблицы. Генерация таблиц это исключительно для чернового наброска. Хибер никогда вам не сгенерирует правильно все возможные констрейнты. Для продакшн систем таблицы создавать только самостоятельно. Клевое подспорье - liquibase. Hibernate Tools и Hibernate ORM это вообще два разных инструмента. Зачем вы их в кучу мешаете в одном вопросе? тут еще вопрос возникает Hibernate Tools не в состоянии сгенерировать правильно сущности основываясь даже на готовых таблицах Body и Heart. По свойствам таблиц в базе данных, Body и Heart независимые сущности. Вот только у второй сущности (в моем случае Heart) Heart.id не имеет @GeneratedValue и seId(Long id) имеет private доступ. То есть я никак не могу сохранить его с помощью хибернейт поскольку у вновь созданного вручную Heart нет id. По сути при сохранении Body также должен сохраняться и Heart с Heart.id аналогичным Body.id (который уже и имеет @GeneratedValue). Количество записей в Body всегда должно совпадать с количеством Записей в Heart. Вот это как я понял и есть @OneToOne based on shared primary keys. только как это реализовать непонятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 16:46:40 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
lleming, С чего взяли что разбивать одну таблу на 2 лучше для бд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 16:52:54 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
lleming, нескромный вопрос - зачем вам связь OneToOne? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 16:54:12 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, опередил( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 16:55:48 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
ну я так хибер изучаю. к тому же если в сущности over 9000 параметров то детали нужно убрать куда нибудь чтоб не мешались. вот здесь нашел ответ http://assarconsulting.blogspot.com/2009/08/one-to-one-shared-primary-key.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 17:08:32 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
lleming, мы все постоянно учимся, как Ленин. Мне кажется ситуация не для OneToOne. Это насколько мне известно довольно редкая штука. Взять даже ваш пример. Есть человек, у него есть сердце. Никто отдельно от человека к сердцу не обращается. Чтобы врач послушал сердце, надо чтобы к нему пришел пациент. а он послушает у пациента сердце. Если напрямую к Heart вы обращаться не будете, не делайте Heart сущностью(Entity), сделайте его embedded object.Тогда вам не придется заботиться о его жизненном цикле и мучаться с ключами. За это будет отвечать тело. Понадобится сердце - получите тело, через него к сердцу обратитесь. Если же вам нужна ссылка на сердце, которая будет храниться вне тела, тогда уж извращайтесь с onetoone. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 17:41:10 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerlleming, мы все постоянно учимся, как Ленин. Мне кажется ситуация не для OneToOne. Это насколько мне известно довольно редкая штука. Взять даже ваш пример. Есть человек, у него есть сердце. Никто отдельно от человека к сердцу не обращается. Чтобы врач послушал сердце, надо чтобы к нему пришел пациент. а он послушает у пациента сердце. Если напрямую к Heart вы обращаться не будете, не делайте Heart сущностью(Entity), сделайте его embedded object.Тогда вам не придется заботиться о его жизненном цикле и мучаться с ключами. За это будет отвечать тело. Понадобится сердце - получите тело, через него к сердцу обратитесь. Если же вам нужна ссылка на сердце, которая будет храниться вне тела, тогда уж извращайтесь с onetoone. я исходил из того что мне нужно то что вы описали. т.е. мне не нужно создавать и сохранять экземпляры Heart отдельно от Body. поэтому и Heart.id не имеет @GeneratedValue а Heart.setId имеет доступ private. Вся работа идет через Body. Появилось Body сделал новое Heart прикрепил его к Body и дальше save load update только с Body. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 17:55:00 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
lleming, поэтому и Heart.id не имеет @GeneratedValue а Heart.setId имеет доступ private. это лишнее, при таком способе id для heart не нужно вообще, потому что это уже не самостоятельная сущность, а часть другой сущности, не будет у него собственного идентификатора в базе данных. Мапится Heart не как @Entity а как @Embeddable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 18:00:25 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapecker, +1 а обоснование автор9000 параметров то детали нужно убрать куда нибудь чтоб не мешались. не выдерживает никакой критики. Табличка с 200 и 300 полями - рядовое явление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 20:03:35 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123javapecker, +1 а обоснование автор9000 параметров то детали нужно убрать куда нибудь чтоб не мешались. не выдерживает никакой критики. Табличка с 200 и 300 полями - рядовое явление.В мире реляций - да, в ООП - не совсем рядовое ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 23:28:22 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
WGAВ мире реляций - да, в ООП - не совсем рядовое ) ООП маппится на реляцию 1 к 1. Логики не хватает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 23:38:33 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123WGAВ мире реляций - да, в ООП - не совсем рядовое ) ООП маппится на реляцию 1 к 1. Логики не хватает)Не согласен. Маппится-то может и один-к-одному в итоге, но структуризация данных разная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2012, 23:48:10 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
WGAPetro123пропущено... ООП маппится на реляцию 1 к 1. Логики не хватает)Не согласен. Маппится-то может и один-к-одному в итоге, но структуризация данных разная. ну дак приведи пример в подкрепление своих слов. Модель данных в одинаковых терминах. Ещё ДО классов. Сущности одинаковые, что там что здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 10:52:56 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38056825&tid=2130463]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 294ms |
| total: | 466ms |

| 0 / 0 |
