powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема со связью @OneToOne
5 сообщений из 5, страница 1 из 1
Проблема со связью @OneToOne
    #37921447
swerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

У меня проблема со связью @OneToOne с JPA. Мне надо:
1) Чтобы чайлд объект поднимался одновременно с родительским (FetchType.EAGER).
2) Если чайда нет в базе, после вычитывания родительского объекта я проверял на нюль чайлда и если нюль, то сетил в него новый инстанс.

В итоге чалд не понимается из базы и не записывается в него. Попробовал все что можно.
Самое интересное с @OneToMany проблем никаких... (нельзя использовать ее вместо @OneToOne).
Должно быть что-то очень простое. Принимаются любые идеи.

ОШИБОК В ЛОГЕ НЕТ!!! Были бы погуглил. Объект не вычитывается и не сохраняется.

P.S. я убирал все констрайны с полей и применял optional =true/false - не помогло.

Ниже привожу код и объявление таблиц в базе.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Entity
@Table(name = "parent")
public class Parent implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer parentID;


    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name="parentID")  //, unique=true, nullable=false, updatable=false
    private Child child;

...
// other column   
...
// setters and getters
...
}




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@Entity
@Table(name = "child")
public class Child implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer childID;


    @OneToOne(mappedBy = "child")
    private Parent parent;

...
// other column   
...
// setters and getters
...
}




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE `parent` (
  `parentID` int(11) NOT NULL ,
  `text` varchar(65524) NOT NULL,
  PRIMARY KEY (`parentID`)
);


CREATE TABLE `child` (
  `childID` int(11) NOT NULL,
  `parentID` int(11) NOT NULL ,
  `text` varchar(65524) NOT NULL,
  PRIMARY KEY (`childID`),
  UNIQUE KEY `parentID` (`parentID`),
  KEY `fk_parentID` (`parentID`),
  CONSTRAINT `fk_parentID` FOREIGN KEY (`parentID`) REFERENCES `parent` (`parentID`)
);
...
Рейтинг: 0 / 0
Проблема со связью @OneToOne
    #37921528
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swerg,

Что значит "В итоге чалд не понимается из базы и не записывается в него"? Где код которым вы это проверяли, как персистили объекты и как их затем фетчили, в одной транзакции в разных и стоит ли кэширование данных?
...
Рейтинг: 0 / 0
Проблема со связью @OneToOne
    #37922982
swerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OOsalivan,

>>"В итоге чалд не понимается из базы и не записывается в него"?

Если есть соотвестсвующая запись в чайлд таблице, то чайл объектпустой в парент ентити бине.
Перед запись парент бина, я нинициализирую чайлд объект и он не записывается в базу.

Где код которым вы это проверяли, как персистили объекты и как их затем фетчили, в одной транзакции в разных и стоит ли кэширование данных?

Читал парент объект (предполагаю, что чайл должен вычитываться, т.к. стоит FetchType.EAGER):
getJpaTemplate().find(clazz, key);

Предвижу вопрос - EAGER только один для парент объекта.

Записывал парент (предполагаю, что чайлд должен сохраниться, т.к. стоит CascadeType.ALL (включает CascadeType.PERSIST):
getJpaTemplate().persist(object);

Кеша второго уровня нет.
В рамках одной транзакции.
...
Рейтинг: 0 / 0
Проблема со связью @OneToOne
    #37923166
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swerg,
приведите тест-код проверки в Main
...
Рейтинг: 0 / 0
Проблема со связью @OneToOne
    #37924017
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swergВ рамках одной транзакции.
Перекрестные ссылки выставляете перед тем как персистить, т.е. не только парент - чайлд, но и чаилд - парент. перед фитчингом попробуйте у энтити менеджера вызвать клеан
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема со связью @OneToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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