powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить Hibernate автоматически связывать объекты?
25 сообщений из 78, страница 1 из 4
Как заставить Hibernate автоматически связывать объекты?
    #39899803
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Есть таблицы:
Таблица Author
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
@Getter
@Setter
public class Author implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
....

    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY, mappedBy = "author")
    private Book book;
}



Таблица Book
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Entity
@Getter
@Setter
public class Book implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
...

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    private Author author;
}




Все сущностью создаются с помощью JAXB из XMl-файла. Всё хорошо, вот только у объекта book поле author - null.

Код записи в БД:
Код: java
1.
2.
3.
4.
5.
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.persist(author);
session.getTransaction().commit();
session.close();




В таком случае в таблицы book и author записываются строки, только book.author_id = null.

При выполнении кода
Код: java
1.
2.
3.
4.
5.
6.
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
author.getBook().setAuthor(author);
session.persist(author);
session.getTransaction().commit();
session.close();



Все данные записываются так, как мне надо.

Проблема в том, что таких таблиц и связей очень много и прописывать команды типа author.getBook().setAuthor(author) не правильно на мой взгляд. Да и сама команда как-то странно выглядит.

Как заставить hibernate автоматически подставлять в дочерние элементы ссылку на родителя?

p.s. Вместо @MapsId писал @JoinColumn, но на результат это не повлияло.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899811
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Проблема в том, что таких таблиц и связей очень много и прописывать команды типа author.getBook().setAuthor(author) не правильно на мой взгляд. Да и сама команда как-то странно выглядит.

Дай ссыль или букварь или спеку как надо и мы посмотрим. Правильно или нет.
Не по памяти же код писал?

Crunkor
Все сущностью создаются с помощью JAXB из XMl-файла.
а это причем?
Сломалось после JAXB?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899814
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Код: java
1.
author.getBook().setAuthor(author);

как ты иначе связь двух сущностей вставишь?
Короче, hello world где?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899829
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Crunkor
]
как ты иначе связь двух сущностей вставишь?


Это я и хотел спросить =).

Для чего нужны все эти связи, если нужно вручную прописывать каждую из них? В моем коде условный объект Author имеет огромное множество таких связей, неужели их надо прописывать вручную?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899831
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp

как ты иначе связь двух сущностей вставишь?


Это я и хотел спросить =).

Для чего нужны все эти связи, если нужно вручную прописывать каждую из них? В моем коде условный объект Author имеет огромное множество таких связей, неужели их надо прописывать вручную?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899837
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Это я и хотел спросить =).
а зачем JAXB приплел?

Crunkor
Для чего нужны все эти связи, если нужно вручную прописывать каждую из них?

Пример из справки один ко многим где?
Там руками ставится?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899838
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
В моем коде условный объект Author имеет огромное множество таких связей,
мы не видим.
Ты не показал.
И по какой нормальной форме нормализовал модель тоже не видим.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899844
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас приходит XML извне, то выкиньте хибер и сохраняйте эти xml прямо в блоб.
Либо отработайте хибер, но не приплетайте jaxb. Они на разных планетах друг от друга.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899856
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
@JoinColumn(name="внешний id", referencedColumnName="id справочника")


Попробуй так.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899859
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Если у вас приходит XML извне, то выкиньте хибер и сохраняйте эти xml прямо в блоб.
Либо отработайте хибер, но не приплетайте jaxb. Они на разных планетах друг от друга.


В XML приходит база данных.
Что-то типа:
Код: xml
1.
2.
3.
4.
5.
6.
<AUTHOR>
    <NAME>Автор 1</NAME>
    <BOOK>
        <NAME>Книга 1</NAME>
    </BOOK>
</AUTHOR>


На самом деле XML достаточно большой и разветвленный.

При помощи JABX я создаю из этого XML файла объект
Код: java
1.
2.
3.
JAXBContext context = JAXBContext.newInstance(Author.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Author author = (Author) unmarshaller.unmarshal(new File(fileHeader.getFileName()));


JABX на мой взгляд выполняет все успешно. Создается объект author в котором присутствуют все поля и вложенные объекты.

Классы с JAXB+HIBERNATE
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
@Getter
@Setter
@XmlRootElement(name="AUTHOR")
@XmlAccessorType(XmlAccessType.FIELD)
public class Author implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
  
    @XmlElement(name="NAME")
    private String Name;

    @XmlElement(name="BOOK")
    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY, mappedBy = "author")
    private Book book;
} 


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
@Getter
@Setter
@XmlRootElement(name="BOOK")
@XmlAccessorType(XmlAccessType.FIELD)
public class Book implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @XmlElement(name="NAME")
    private String Name;

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    private Author author;
}




После этого я хочу author записать в базу данных.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899867
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
Код: java
1.
@JoinColumn(name="внешний id", referencedColumnName="id справочника")


Попробуй так.


Не помогло. Поле book у объекта author всё так же null.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899880
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
На самом деле XML достаточно большой и разветвленный.
допустим 200 таблиц.
А с циклическими связями как?
Crunkor
При помощи JABX я создаю из этого XML файла объект
попробуй реальную базу записной книжки из 5 таблиц. Не выйдет.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899883
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
После этого я хочу author записать в базу данных.
зачем ВСЮ БД перегонять туда сюда через xml?
Странная задача.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899893
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Crunkor
На самом деле XML достаточно большой и разветвленный.
допустим 200 таблиц.
А с циклическими связями как?
Crunkor
При помощи JABX я создаю из этого XML файла объект
попробуй реальную базу записной книжки из 5 таблиц. Не выйдет.


JAXB прекрасно создает объект, с ним проблем нет.

PetroNotC Sharp
Crunkor
После этого я хочу author записать в базу данных.
зачем ВСЮ БД перегонять туда сюда через xml?
Странная задача.


Перегоняется не вся база а только часть. Xml файлов много, каждый содержит свои данные, а структура одна.

Команда
Код: java
1.
session.persist(author);


присваивает объектам ID, но оставляет пустым поле author у book. Мне кажется, что тут не хватает либо какой-то настройки, либо неправильно указаны связи между таблицами.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899900
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
JAXB прекрасно создает объект, с ним проблем нет.
а мы же про связи?)))))
Он заточен передавать коллекции без связей. VO или DTO.
Получил коллекцию, принял коллекцию.
Коллекцию в базу.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899904
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Мне кажется, что тут не хватает либо какой-то настройки, либо неправильно указаны связи между таблицами.
документация когда будет?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899906
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Не помогло. Поле book у объекта author всё так же null.
hello world из сети когда будет?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899953
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Crunkor
JAXB прекрасно создает объект, с ним проблем нет.
а мы же про связи?)))))
Он заточен передавать коллекции без связей. VO или DTO.
Получил коллекцию, принял коллекцию.
Коллекцию в базу.


Не совсем понял, что вы хотели сказать.

PetroNotC Sharp
Crunkor
Мне кажется, что тут не хватает либо какой-то настройки, либо неправильно указаны связи между таблицами.
документация когда будет?


xD Это намек на то, что бы я пошел читать какую-нибудь книгу по Hibernate с 600+ страницами ? Видимо пока другого выхода нет.

PetroNotC Sharp
Crunkor
Не помогло. Поле book у объекта author всё так же null.
hello world из сети когда будет?


Слишком тонко для меня.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899963
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Не совсем понял, что вы хотели сказать.
я не видел НИГДЕ твоей задачи. Она странная. Прэтому прошу подробностей.
Понятно?
Crunkor
книгу по Hibernate с 600+ страницами ?

Hello world один ко многим.
....
сущностьА.добавитьСвязь(б)
Везде это надо.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899966
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor,
Вон, у apb12 спроси. Может в спринге какое таинство есть и связи сами сохраняются.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39899988
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Crunkor
Не совсем понял, что вы хотели сказать.
я не видел НИГДЕ твоей задачи. Она странная. Прэтому прошу подробностей.
Понятно?
Crunkor
книгу по Hibernate с 600+ страницами ?

Hello world один ко многим.
....
сущностьА.добавитьСвязь(б)
Везде это надо.


Всё равно не понятно о какой другой задаче идет речь кроме как записать объект author в БД с использованием Hibernate.

сущностьА.добавитьСвязь(б)
Разве не для этого прописываются аннотации? В моем случае @OneToOne
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39900018
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor

Разве не для этого прописываются аннотации? В моем случае @OneToOne

Мне интересно, ты представлял себя на месте хибера? Как ты поймешь что объект автор и объект бук надо связать?
После создания JAXB объектом - ссылки правильно расставлены?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39900023
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Разве не для этого прописываются аннотации? В моем случае @OneToOne

Да. Но без JAXB ЖЕ?
Пример то поищи в инете.
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39900024
Crunkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник
Crunkor

Разве не для этого прописываются аннотации? В моем случае @OneToOne

Мне интересно, ты представлял себя на месте хибера? Как ты поймешь что объект автор и объект бук надо связать?
После создания JAXB объектом - ссылки правильно расставлены?

Вручную я ссылки нигде не расставлял. Мне казалось, что этим должен был заняться hibernate после указаний аннотаций.
Конструкции типа author.getBook().setAuthor(author) на мой взгляд неправильные. Для чего в книге, которая сидит в авторе указывать ее автора?
...
Рейтинг: 0 / 0
Как заставить Hibernate автоматически связывать объекты?
    #39900030
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crunkor
Конструкции типа author.getBook().setAuthor(author) на мой взгляд неправильные. Для чего в книге, которая сидит в авторе указывать ее автора?
а где ты взял этот код?))))
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить Hibernate автоматически связывать объекты?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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