|
|
|
реализация @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 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, Ещё ДО классов. это как? нет классов - нет ооп модели. как это можно сравнивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:06:00 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapecker, - UML - сущность и её характеристики А потом всё ЭТО как view ложиться на РСУБД либо через ОРМ либо без него. Всё равно 3 вида отношений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:09:53 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, ООП маппится на реляцию 1 к 1. В твоем варианте есть модель и есть база. Понятно что модель как-то на базу натянется. А сравнивать то с чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:26:06 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, и один к одному мапиться не будет, в объектной модели может быть допустим 4 сущности: тело, сердце, мозг и печень. И все они могут лежать в одной таблице, и на уровне базы об их отношениях вообще не будет никаких сведений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:31:48 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, и один к одному мапиться не будет, в объектной модели может быть допустим 4 сущности: тело, сердце, мозг и печень. И все они могут лежать в одной таблице, и на уровне базы об их отношениях вообще не будет никаких сведений. ты только что выше - доказывал обратное (не надо дробить на классы без нужды). Укладка модели в базу и хибер сдерживает усложнение модели программистом. Его изощрённые фантазии. Поэтому, _стандарт хибера_ - сущность на таблицу. А так, можно класс и в блоб запихать. Это как Многие ко Многим, ЧАЩЕ всего промежуточная не embedded а отдельная таблица. Вообще, лучше конкретика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:37:57 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerА сравнивать то с чем? это к WGA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:39:52 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, авторты только что выше - доказывал обратное (не надо дробить на классы без нужды). Нет, я говорил что не нужно создавать отдельную сущность - таблицу в базе, если нет необходимости. То есть несколько классов в объектной модели вполне могут лечь в одну таблицу, если между ними существует отношение: один главный - остальные подчинены ему и связаны один к одному. При этом в объектной модели такую связь видно, на уровне базы - не видно. Если делать такие классы таблицами, то со стороны базы это будет выглядеть как один ко многим, хотя в модели это один к одному. То есть мы ничего с точки зрения понимания модели по базе не выиграем. Насчет один класс - одна таблица, как только начнутся отношения наследования, о которых база ничего знать не может, начнутся извращения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:49:36 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
мы ушли в сторону javapeckerТо есть несколько классов в объектной модели вполне могут лечь в одну таблицу т.е. это соответствует тезису: "200-300 полей в табличке вполне может быть и это нормально". То что я сказал выше. ... Вопрос о 300 полях в классе без конкретики - не решить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 11:58:53 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerНасчет один класс - одна таблица, как только начнутся отношения наследования , о которых база ничего знать не может, начнутся извращения. это тоже отдельная тема...и тоже усложняет Модель. Можно и дружественные классы в Jav'у запихнуть...и EAV. Ну его нафиг - про сферических коней. Рсубд сдерживает - и это правильно))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:02:35 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, автор200-300 полей в табличке вполне может быть и это нормально мне кажется это ненормально, но не в контексте модели, а с эстетической точки зрения. То есть таблица в которой 300 полей навевает не меня грусть. Меня насторожила не фраза про табличку и много полей, а про то, что ООП мапится на реляцию 1 к 1. В базе - это табличка с полями и все. А в ООП - это может быть 30 классов, каждый из которых имеет свое место в модели. То есть - не мапится ооп на реляцию хоть ты тресни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:10:30 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Спор теоретиков может разбиться об обыкновенные ограничения DBMS. Например, большой кусок RAW/BLOB данных физически не влезает в строку и таблицу делят на 2 ломтя со связями 1:1. Это приходит из практики. Для быстрой работы с EAV некто Томас Кайт предлагает забить в таблицу полей типа FIELD_1...FIELD_N столько сколько влезет и работать обычной алгеброй а маппинг соотв. делать на application. Тоже решение из практики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:19:14 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerа с эстетической точки зрения )))) классная фраза))) Почти соответствует "Техническая красота") ... Приведу пример: - вопрос на форуме РСУБД по Ораклу "У меня табличка с 350 полями - с этим надо что-то делать. Это ненормально для БД?" - там ответили что ничего страшного. И там не глупые люди). авторТо есть - не мапится ооп на реляцию хоть ты тресни тресну)), если будет конкретика как тут: http://www.databaseanswers.org/data_models/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:25:57 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
maytonEAV согласен, там есть много путей нивелировать Недостатки EAV. Но общий посыл такой - вкусно поначалу, но лучше не пробовать (без нужды). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:28:42 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, тресну)), если будет конкретика как тут: Для начала вопрос." ООП маппится на реляцию 1 к 1" - я понимаю это так, что по базе можно восстановить модель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:37:06 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, тресну)), если будет конкретика как тут: Для начала вопрос." ООП маппится на реляцию 1 к 1" - я понимаю это так, что по базе можно восстановить модель? ты должен к этому стремиться! Иначе вместо FK будет куча кода, которая ИСКУССТВЕННО поддерживает целостность. Или каскад. Хибер старается делать реинженеринг правильно в обратную сторону. А не я )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:44:51 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, я конкретный вопрос задал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:50:14 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, я конкретный вопрос задал я ответил: - выбери любую предметную область выше по ссылке. - сделай Модель на Java которая НЕ вернётся обратно и не соответствует этому DDL У тебя получится сделать не 1 к 1. Уверен. Только это не правильно и не красиво)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:54:17 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
ОРМ и Модель не выше РСУБД. Им сложно друг без друга и без 1 к 1. imho Удачи аффтару! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 12:56:18 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
Petro123, авторУ тебя получится сделать не 1 к 1. Уверен. при чем тут я? я же спрашиваю , что ты имел ввиду, когда написал это? ООП маппится на реляцию 1 к 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 13:02:04 |
|
||
|
реализация @OneToOne в хибере
|
|||
|---|---|---|---|
|
#18+
javapecker, это значит, по умолчанию (без обоснования необходимости) соглашения: - сущность на класс - реинжиниринг обратно в схему классов ЯП из БД - 3 вида отношений в классах, как и 3 степени нормализации БД - не дробить на классы и не усложнятьь модель ООП, чтобы потом РСУБД "стало плохо". - .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 13:12:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2130463]: |
0ms |
get settings: |
18ms |
get forum list: |
24ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
43ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 302ms |
| total: | 508ms |

| 0 / 0 |
