powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / реализация @OneToOne в хибере
45 сообщений из 45, показаны все 2 страниц
реализация @OneToOne в хибере
    #38056054
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
реализация @OneToOne в хибере
    #38056058
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foreign_key не создается :(
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056068
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056070
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingforeign_key не создается :(
Это здесь при чем?
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056109
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
реализация @OneToOne в хибере
    #38056113
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

смешно но я его как раз счас читаю.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056236
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть кому надо поставить @generatedvalue поставить Body или Heart/
никак не могу понять
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056267
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingто есть кому надо поставить @generatedvalue поставить Body или Heart/
никак не могу понять
Вы одному уже поставили. Не заработало. Поставьте другому.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056397
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
реализация @OneToOne в хибере
    #38056417
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема вот здесь
Это то что у меня
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
реализация @OneToOne в хибере
    #38056471
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хибер вообще не умеет создавать таблицы. Генерация таблиц это исключительно для чернового наброска. Хибер никогда вам не сгенерирует правильно все возможные констрейнты.
Для продакшн систем таблицы создавать только самостоятельно. Клевое подспорье - liquibase.

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

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

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

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

http://assarconsulting.blogspot.com/2009/08/one-to-one-shared-primary-key.html
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056800
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
мы все постоянно учимся, как Ленин. Мне кажется ситуация не для OneToOne. Это насколько мне известно довольно редкая штука. Взять даже ваш пример. Есть человек, у него есть сердце. Никто отдельно от человека к сердцу не обращается. Чтобы врач послушал сердце, надо чтобы к нему пришел пациент. а он послушает у пациента сердце. Если напрямую к Heart вы обращаться не будете, не делайте Heart сущностью(Entity), сделайте его embedded object.Тогда вам не придется заботиться о его жизненном цикле и мучаться с ключами. За это будет отвечать тело. Понадобится сердце - получите тело, через него к сердцу обратитесь. Если же вам нужна ссылка на сердце, которая будет храниться вне тела, тогда уж извращайтесь с onetoone.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056825
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
реализация @OneToOne в хибере
    #38056839
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
поэтому и Heart.id не имеет @GeneratedValue а Heart.setId имеет доступ private.
это лишнее, при таком способе id для heart не нужно вообще, потому что это уже не самостоятельная сущность, а часть другой сущности, не будет у него собственного идентификатора в базе данных. Мапится Heart не как @Entity а как @Embeddable.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38056999
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker, +1

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

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

ООП маппится на реляцию 1 к 1.
Логики не хватает)Не согласен. Маппится-то может и один-к-одному в итоге, но структуризация данных разная.
ну дак приведи пример в подкрепление своих слов.
Модель данных в одинаковых терминах. Ещё ДО классов.
Сущности одинаковые, что там что здесь.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057487
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Ещё ДО классов.
это как? нет классов - нет ооп модели. как это можно сравнивать?
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057492
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,
- UML
- сущность и её характеристики
А потом всё ЭТО как view ложиться на РСУБД либо через ОРМ либо без него.
Всё равно 3 вида отношений.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057526
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
ООП маппится на реляцию 1 к 1.
В твоем варианте есть модель и есть база. Понятно что модель как-то на базу натянется. А сравнивать то с чем?
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057535
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

и один к одному мапиться не будет, в объектной модели может быть допустим 4 сущности: тело, сердце, мозг и печень. И все они могут лежать в одной таблице, и на уровне базы об их отношениях вообще не будет никаких сведений.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057543
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerPetro123,

и один к одному мапиться не будет, в объектной модели может быть допустим 4 сущности: тело, сердце, мозг и печень. И все они могут лежать в одной таблице, и на уровне базы об их отношениях вообще не будет никаких сведений.
ты только что выше - доказывал обратное (не надо дробить на классы без нужды).
Укладка модели в базу и хибер сдерживает усложнение модели программистом. Его изощрённые фантазии.
Поэтому, _стандарт хибера_ - сущность на таблицу. А так, можно класс и в блоб запихать.

Это как Многие ко Многим, ЧАЩЕ всего промежуточная не embedded а отдельная таблица.

Вообще, лучше конкретика.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057549
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerА сравнивать то с чем?
это к WGA
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057575
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
авторты только что выше - доказывал обратное (не надо дробить на классы без нужды).
Нет, я говорил что не нужно создавать отдельную сущность - таблицу в базе, если нет необходимости. То есть несколько классов в объектной модели вполне могут лечь в одну таблицу, если между ними существует отношение: один главный - остальные подчинены ему и связаны один к одному. При этом в объектной модели такую связь видно, на уровне базы - не видно. Если делать такие классы таблицами, то со стороны базы это будет выглядеть как один ко многим, хотя в модели это один к одному. То есть мы ничего с точки зрения понимания модели по базе не выиграем. Насчет один класс - одна таблица, как только начнутся отношения наследования, о которых база ничего знать не может, начнутся извращения.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057599
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мы ушли в сторону
javapeckerТо есть несколько классов в объектной модели вполне могут лечь в одну таблицу
т.е. это соответствует тезису: "200-300 полей в табличке вполне может быть и это нормально".
То что я сказал выше.
...
Вопрос о 300 полях в классе без конкретики - не решить.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057607
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerНасчет один класс - одна таблица, как только начнутся отношения наследования , о которых база ничего знать не может, начнутся извращения.
это тоже отдельная тема...и тоже усложняет Модель.
Можно и дружественные классы в Jav'у запихнуть...и EAV.
Ну его нафиг - про сферических коней.
Рсубд сдерживает - и это правильно)))
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057633
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
автор200-300 полей в табличке вполне может быть и это нормально
мне кажется это ненормально, но не в контексте модели, а с эстетической точки зрения. То есть таблица в которой 300 полей навевает не меня грусть. Меня насторожила не фраза про табличку и много полей, а про то, что ООП мапится на реляцию 1 к 1. В базе - это табличка с полями и все. А в ООП - это может быть 30 классов, каждый из которых имеет свое место в модели. То есть - не мапится ооп на реляцию хоть ты тресни.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057651
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спор теоретиков может разбиться об обыкновенные ограничения DBMS. Например,
большой кусок RAW/BLOB данных физически не влезает в строку и таблицу делят
на 2 ломтя со связями 1:1. Это приходит из практики.

Для быстрой работы с EAV некто Томас Кайт предлагает забить в таблицу полей
типа FIELD_1...FIELD_N столько сколько влезет и работать обычной алгеброй
а маппинг соотв. делать на application. Тоже решение из практики.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057669
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerа с эстетической точки зрения
))))
классная фраза))) Почти соответствует "Техническая красота")
...
Приведу пример:
- вопрос на форуме РСУБД по Ораклу "У меня табличка с 350 полями - с этим надо что-то делать. Это ненормально для БД?"
- там ответили что ничего страшного. И там не глупые люди).

авторТо есть - не мапится ооп на реляцию хоть ты тресни
тресну)), если будет конкретика как тут:
http://www.databaseanswers.org/data_models/
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057679
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonEAV
согласен, там есть много путей нивелировать Недостатки EAV. Но общий посыл такой - вкусно поначалу, но лучше не пробовать (без нужды).
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057702
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
тресну)), если будет конкретика как тут:
Для начала вопрос." ООП маппится на реляцию 1 к 1" - я понимаю это так, что по базе можно восстановить модель?
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerPetro123,
тресну)), если будет конкретика как тут:
Для начала вопрос." ООП маппится на реляцию 1 к 1" - я понимаю это так, что по базе можно восстановить модель?
ты должен к этому стремиться!
Иначе вместо FK будет куча кода, которая ИСКУССТВЕННО поддерживает целостность.
Или каскад.

Хибер старается делать реинженеринг правильно в обратную сторону. А не я ))
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057738
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
я конкретный вопрос задал
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057756
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerPetro123,
я конкретный вопрос задал
я ответил:
- выбери любую предметную область выше по ссылке.
- сделай Модель на Java которая НЕ вернётся обратно и не соответствует этому DDL
У тебя получится сделать не 1 к 1. Уверен.
Только это не правильно и не красиво))))
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057760
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОРМ и Модель не выше РСУБД. Им сложно друг без друга и без 1 к 1.
imho
Удачи аффтару!
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057776
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

авторУ тебя получится сделать не 1 к 1. Уверен.
при чем тут я?
я же спрашиваю , что ты имел ввиду, когда написал это?
ООП маппится на реляцию 1 к 1.
...
Рейтинг: 0 / 0
реализация @OneToOne в хибере
    #38057807
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,
это значит, по умолчанию (без обоснования необходимости) соглашения:
- сущность на класс
- реинжиниринг обратно в схему классов ЯП из БД
- 3 вида отношений в классах, как и 3 степени нормализации БД
- не дробить на классы и не усложнятьь модель ООП, чтобы потом РСУБД "стало плохо".
- ....
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / реализация @OneToOne в хибере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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