Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / реализация @OneToOne в хибере / 25 сообщений из 45, страница 1 из 2
28.11.2012, 12:09:25
    #38056054
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
public class Body {
    @Id
    public Long getId() { return id; }

    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    public Heart getHeart() {
        return heart;
    }
    ...
}            
@Entity
public class Heart {
    @Id
    public Long getId() { ...}
}    



пример из доки для хибера
я ставлю также на 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
...
Рейтинг: 0 / 0
28.11.2012, 12:10:15
    #38056058
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
foreign_key не создается :(
...
Рейтинг: 0 / 0
28.11.2012, 12:14:14
    #38056068
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
...
Рейтинг: 0 / 0
28.11.2012, 12:14:29
    #38056070
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
llemingforeign_key не создается :(
Это здесь при чем?
...
Рейтинг: 0 / 0
28.11.2012, 12:29:24
    #38056109
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
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)
...
Рейтинг: 0 / 0
28.11.2012, 12:30:25
    #38056113
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Blazkowicz,

смешно но я его как раз счас читаю.
...
Рейтинг: 0 / 0
28.11.2012, 13:27:37
    #38056236
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
то есть кому надо поставить @generatedvalue поставить Body или Heart/
никак не могу понять
...
Рейтинг: 0 / 0
28.11.2012, 13:46:55
    #38056267
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
llemingто есть кому надо поставить @generatedvalue поставить Body или Heart/
никак не могу понять
Вы одному уже поставили. Не заработало. Поставьте другому.
...
Рейтинг: 0 / 0
28.11.2012, 14:36:14
    #38056397
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
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.
Session session = HibernateUtil.getSessionfactory().openSession();
		session.beginTransaction();
		for(int i = 0; i < 100; i++){
			Body body = new Body(RandomStringUtils.randomAlphabetic(3));
			Heart heart = new Heart();
			heart.setRate((int)(Math.random()*180));
			body.setHeart(heart);
			
			session.save(body);
		}
		session.getTransaction().commit();
...
Рейтинг: 0 / 0
28.11.2012, 14:44:39
    #38056417
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
проблема вот здесь
Это то что у меня
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 игнорируются
...
Рейтинг: 0 / 0
28.11.2012, 15:09:56
    #38056471
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Хибер вообще не умеет создавать таблицы. Генерация таблиц это исключительно для чернового наброска. Хибер никогда вам не сгенерирует правильно все возможные констрейнты.
Для продакшн систем таблицы создавать только самостоятельно. Клевое подспорье - liquibase.

Hibernate Tools и Hibernate ORM это вообще два разных инструмента. Зачем вы их в кучу мешаете в одном вопросе?
...
Рейтинг: 0 / 0
28.11.2012, 15:25:42
    #38056501
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Blazkowicz,
спасибо за прояснение. просветлело наконец.
...
Рейтинг: 0 / 0
28.11.2012, 16:46:40
    #38056658
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
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.
только как это реализовать непонятно
...
Рейтинг: 0 / 0
28.11.2012, 16:52:54
    #38056680
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
lleming,
С чего взяли что разбивать одну таблу на 2 лучше для бд?
...
Рейтинг: 0 / 0
28.11.2012, 16:54:12
    #38056684
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
lleming,

нескромный вопрос - зачем вам связь OneToOne?
...
Рейтинг: 0 / 0
28.11.2012, 16:55:48
    #38056687
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Petro123,

опередил(
...
Рейтинг: 0 / 0
28.11.2012, 17:08:32
    #38056719
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
ну я так хибер изучаю.
к тому же если в сущности over 9000 параметров то детали нужно убрать куда нибудь чтоб не мешались.

вот здесь нашел ответ

http://assarconsulting.blogspot.com/2009/08/one-to-one-shared-primary-key.html
...
Рейтинг: 0 / 0
28.11.2012, 17:41:10
    #38056800
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
lleming,
мы все постоянно учимся, как Ленин. Мне кажется ситуация не для OneToOne. Это насколько мне известно довольно редкая штука. Взять даже ваш пример. Есть человек, у него есть сердце. Никто отдельно от человека к сердцу не обращается. Чтобы врач послушал сердце, надо чтобы к нему пришел пациент. а он послушает у пациента сердце. Если напрямую к Heart вы обращаться не будете, не делайте Heart сущностью(Entity), сделайте его embedded object.Тогда вам не придется заботиться о его жизненном цикле и мучаться с ключами. За это будет отвечать тело. Понадобится сердце - получите тело, через него к сердцу обратитесь. Если же вам нужна ссылка на сердце, которая будет храниться вне тела, тогда уж извращайтесь с onetoone.
...
Рейтинг: 0 / 0
28.11.2012, 17:55:00
    #38056825
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
javapeckerlleming,
мы все постоянно учимся, как Ленин. Мне кажется ситуация не для OneToOne. Это насколько мне известно довольно редкая штука. Взять даже ваш пример. Есть человек, у него есть сердце. Никто отдельно от человека к сердцу не обращается. Чтобы врач послушал сердце, надо чтобы к нему пришел пациент. а он послушает у пациента сердце. Если напрямую к Heart вы обращаться не будете, не делайте Heart сущностью(Entity), сделайте его embedded object.Тогда вам не придется заботиться о его жизненном цикле и мучаться с ключами. За это будет отвечать тело. Понадобится сердце - получите тело, через него к сердцу обратитесь. Если же вам нужна ссылка на сердце, которая будет храниться вне тела, тогда уж извращайтесь с onetoone.

я исходил из того что мне нужно то что вы описали. т.е. мне не нужно создавать и сохранять экземпляры Heart отдельно от Body.
поэтому и Heart.id не имеет @GeneratedValue а Heart.setId имеет доступ private. Вся работа идет через Body.
Появилось Body сделал новое Heart прикрепил его к Body и дальше save load update только с Body.
...
Рейтинг: 0 / 0
28.11.2012, 18:00:25
    #38056839
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
lleming,
поэтому и Heart.id не имеет @GeneratedValue а Heart.setId имеет доступ private.
это лишнее, при таком способе id для heart не нужно вообще, потому что это уже не самостоятельная сущность, а часть другой сущности, не будет у него собственного идентификатора в базе данных. Мапится Heart не как @Entity а как @Embeddable.
...
Рейтинг: 0 / 0
28.11.2012, 20:03:35
    #38056999
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
javapecker, +1

а обоснование
автор9000 параметров то детали нужно убрать куда нибудь чтоб не мешались.
не выдерживает никакой критики.
Табличка с 200 и 300 полями - рядовое явление.
...
Рейтинг: 0 / 0
28.11.2012, 23:28:22
    #38057182
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Petro123javapecker, +1

а обоснование
автор9000 параметров то детали нужно убрать куда нибудь чтоб не мешались.
не выдерживает никакой критики.
Табличка с 200 и 300 полями - рядовое явление.В мире реляций - да, в ООП - не совсем рядовое )
...
Рейтинг: 0 / 0
28.11.2012, 23:38:33
    #38057189
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
WGAВ мире реляций - да, в ООП - не совсем рядовое )
ООП маппится на реляцию 1 к 1.
Логики не хватает)
...
Рейтинг: 0 / 0
28.11.2012, 23:48:10
    #38057194
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
Petro123WGAВ мире реляций - да, в ООП - не совсем рядовое )
ООП маппится на реляцию 1 к 1.
Логики не хватает)Не согласен. Маппится-то может и один-к-одному в итоге, но структуризация данных разная.
...
Рейтинг: 0 / 0
29.11.2012, 10:52:56
    #38057471
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
реализация @OneToOne в хибере
WGAPetro123пропущено...

ООП маппится на реляцию 1 к 1.
Логики не хватает)Не согласен. Маппится-то может и один-к-одному в итоге, но структуризация данных разная.
ну дак приведи пример в подкрепление своих слов.
Модель данных в одинаковых терминах. Ещё ДО классов.
Сущности одинаковые, что там что здесь.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / реализация @OneToOne в хибере / 25 сообщений из 45, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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