Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL Hibernate как обновить foreign key на nested entity когда у меня 1-1 или *-1 - Java БД

Восстановить пароль Регистрация
 
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,423
23.11.2016, 22:54     PostgreSQL Hibernate как обновить foreign key на nested entity когда у меня 1-1 или *-1 #1
Здравствуйте!

Имеется следующий маппинг:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@Entity
@Table(name = "A")
public class A {
    @Id
    @Column(name = "id", insertable = false, nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @OneToOne(fetch = FetchType.LAZY, cascade = ALL)
    @JoinColumn(name = "banner_type_id")
    private B b;
 
    @OneToOne(fetch = FetchType.LAZY, cascade = ALL)
    @JoinColumn(name = "country_id")
    private C c;
}
 
@Entity
@Table(name = "B")
public class B {
    @Id
    @Column(name = "id", insertable = false, nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    //other fields
}
 
@Entity
@Table(name = "C")
public class C {
    @Id
    @Column(name = "id", insertable = false, nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    //other fields
}
Для работы с entity использую spring repository. Пытаюсь обновить B и C поля для А сущности вот так:
Java
1
2
3
4
5
        A a = Arepo.findOne(1L);
        //assume that a.b = B(id=1L), a.c = C(id=1L)
        a.b = B(id=2L)
        a.c = C(id=2L)
        Arepo.save(a);
Однако ничего не получается. После сохранения, если снова достать А(id=1L), то у нее будет B(id=1L), C(id=1L). Пробовал также менять @OneToOne на @ManyToOne - ничего.
Я хочу выполнять обновление используя one-to-one unidirectional mapping.
В чем проблема может быть?

Заранее спс!

Добавлено через 16 минут
Помог только такой вариант:

Java
1
2
3
4
...
a.b = Brepo.findOne(a.b.id)
a.c = Crepo.findOne(a.c.id); 
...
Вроде как я понял, но в тоже время буду не против разъяснений. Hibernate не знает про сущность, которая была создана через new, поэтому, чтобы приаттаичить b and c к сессии я просто достаю их из базы.

А есть ли обходные пути?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2016, 22:54     PostgreSQL Hibernate как обновить foreign key на nested entity когда у меня 1-1 или *-1
Посмотрите здесь:

Hibernate search Java БД
Java БД Hibernate
Java БД Когда JPA(hibernate) использует equals/hashcode у entity
Cannot add or update a child row: a foreign key constraint fails Java БД
hibernate Java БД
Как правильно организовывать связку Hibernate и Spring и работать с ней Java БД
Java БД MySQL Hibernate "Unknown entity: fed.guman.User"
Hibernate книга Java БД
Java БД Hibernate, констрейнты
Hibernate projection for nested entity Java БД
Java БД Hibernate. Как это будет в SQL
Java БД Generic и Hibernate

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 15:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru