Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21

Spring Data JPA @PrimaryKeyJoinColumn

06.04.2021, 21:50. Показов 2129. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.

Не работает @PrimaryKeyJoinColumn. В чём причина не знаю. Перечитал весь Интернет и перепробовал все варианты - не работает.

Просто хочу сохранить User и Activated с общим ID. В основном ошибка возникает при сохранении Activated

Подскажите что не так я делаю?

User
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
import javax.persistence.*;
import java.io.Serializable;
 
 
@Entity
@Table(name = "users", schema = "hiber")
public class User implements Serializable {
 
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
 
 
    @Basic
    @Column(name = "username")
    private String username;
 
 
    @OneToOne(mappedBy = "user")
    @PrimaryKeyJoinColumn
    private Activated activated;
 
    // Getter and Setter
 
}

Activated
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
import javax.persistence.*;
import java.io.Serializable;
 
@Entity
@Table(name = "activated", schema = "hiber")
public class Activated implements Serializable {
 
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;
 
 
    @Basic
    @Column(name = "active")
    private String active;
 
    
    @OneToOne
    @MapsId
    @JoinColumn(name = "id")
    private User user;
 
    // Getter and Setter
 
}

Пример 1
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Controller
public class Example1Controller {
 
    @Autowired
    ServiceJpa serviceJpa;
 
    @GetMapping(value = "/example1")
    public String getJpa (User user, Activated activated) {
 
 
        user.setUsername("Jack");
        serviceJpa.saveUser(user);
 
        // Далее возникает ошибка
        // detached entity passed to persist
 
        activated.setUser(user);
        serviceJpa.saveActivated(activated);
 
        return "/example1";
    }
}

Пример 2
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
@Controller
public class Example2Controller {
 
    @Autowired
    ServiceJpa serviceJpa;
 
    @GetMapping(value = "/example2")
    public String getJpa () {
        return "/example2";
    }
 
 
    @PostMapping(value = "/example2")
    public String postJpa (@ModelAttribute("user") User user, Activated activated) {
 
 
        serviceJpa.saveUser(user);
 
        activated.setActive("Activ");
 
        // Далее возникает ошибка
        // attempted to assign id from null one-to-one property
 
        serviceJpa.saveActivated(activated);
 
        return "redirect:/example2";
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2021, 21:50
Ответы с готовыми решениями:

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

QueryDSL и Spring Data JPA
Начал изучать querydsl. Делал по одному примеру. Там из такого запроса: http://localhost:8080/users?search=lastName:doe,age>25 ...

Как настроить Spring Data JPA Repository?
Приветствую уважаемые форумчане. Использую Spring MVC без Spring Boot. Пытаюсь настроить Spring DATA JPA в java классах, без xml....

10
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.04.2021, 00:21
https://thorben-janssen.com/hi... oincolumn/
0
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21
07.04.2021, 05:30  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
https://thorben-janssen.com/hibernate-tip-difference-between-joincolumn-and-primarykeyjoincolumn/
Мне ничего это не дало. Я использовал пример вот от сюда https://www.baeldung.com/jpa-one-to-one.

До сих пор не работает.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.04.2021, 08:56
Открываем документацию и читаем
is used to join the primary table of an entity subclass
Это значит, что ты неверно используешь эту аннотацию.
0
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21
07.04.2021, 10:05  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
is used to join the primary table of an entity subclass

Не могу понять что это значит.

Добавлено через 53 минуты
Я просто пытаюсь сделать вот так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@GetMapping(value = "/jpa")
 
    public String getJpa () {
 
        User user = new User();
        user.setId(2L);
        user.setUsername("Jack");
        serviceJpa.saveUser(user);
 
        Activated activated = new Activated();
        activated.setId(2L);
        activated.setActive("Active");
        serviceJpa.saveActivated(activated);
 
        return "/jpa";
 
    }
и эта ошибка attempted to assign id from null one-to-one property по прежнему появляется

Добавлено через 1 минуту
User сохраняется а Activated выдаёт ошибку attempted to assign id from null one-to-one property

Добавлено через 9 минут
https://github.com/mytestPercon/TestHiber
0
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21
07.04.2021, 16:45  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
Это значит, что ты неверно используешь эту аннотацию.

Как ни так? Всё это сказано в документации Hibernate https://docs.jboss.org/hiberna... Guide.html

Добавлено через 1 минуту
В документации Hibernate начиная с Example 151. Derived identifier with @MapsId
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.04.2021, 17:04
margento, твой код похож на код из документации?
0
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21
07.04.2021, 17:42  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
твой код похож на код из документации?
Вот я сделал идентично из документации

Java
1
2
3
4
5
6
7
8
Person person = new Person("ABC-123");
        person.setId(3L);
        serviceJpa.savePerson(person);
 
        PersonDetails personDetails = new PersonDetails();
        personDetails.setNickName( "John Doe" );
        personDetails.setPerson( person );
        serviceJpa.savePersonDetails(personDetails);
Проблема почти таже. Person сохраняется а PersonDetails не сохраняется и пишет ошибку:

Message Request processing failed; nested exception is org.springframework.dao.DataIntegrityVio lationException: could not execute statement; SQL [n/a]; constraint [person.PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolat ionException: could not execute statement
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.04.2021, 18:11
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
39
40
@Data
@Accessors(chain = true)
@Entity(name = "PersonDetails")
public class PersonDetails {
 
    @Id
    private Long id;
 
    private String nickName;
 
    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private Person person;
 
    public PersonDetails setPerson(Person person) {
        this.person = person;
        this.id = person.getId();
        return this;
    }
}
 
@Data
@Accessors(chain = true)
@Entity(name = "Person")
public class Person {
 
    @Id
    @GeneratedValue
    private Long id;
 
    private String registrationNumber;
}
 
 Person person = personRepository.save(new Person().setRegistrationNumber("123"));
        PersonDetails savedDetails = personDetailsRepository.save(
                new PersonDetails()
                        .setNickName("setNickName")
                        .setPerson(person));
 
        System.out.println(personDetailsRepository.findAll());
1
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21
07.04.2021, 18:29  [ТС]
xoraxax Вроде что то отработало. Завтра уже разберусь и отпишу если что не так, а то время уже 2:30 ночи
0
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 21
08.04.2021, 05:16  [ТС]
xoraxax https://stackoverflow.com/ques... es#tab-top
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2021, 05:16
Помогаю со студенческими работами здесь

Осуществить поиск объекта со Spring data jpa
Есть такой объект public class DepositMatrix implements Serializable, Cloneable { public static final String PRODUCT_LOOKUP_MAIN...

Spring DaTa Jpa @ManyToMany: инициализация списка сущностей
Приветствую! Есть две таблицы: students age grade name id(PK) courses

Cast error for Spring Data JPA customized interface
Всем привет, нужна помощь. После получения записей из базы данных, и доступа к полю объекта я получаю исключение: ------------- ...

Возможно ли заполнить две коллекции Map сущностями одного типа в Spring Data JPA
Доброго всем времени суток. Подскажите пожалуйста, вот имеется сущность @Entity @Table(name = "users") public class...

Выборка данных из нескольких таблиц используя Spring Data JPA Repository и преобразование в json
Всем привет! Сейчас мне данные отдаются в таком виде: Эти данные берутся из одной таблицы public_organisations. Но есть...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru