powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / OneToOne Hibernate Spring Mysql
16 сообщений из 16, страница 1 из 1
OneToOne Hibernate Spring Mysql
    #38278695
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть два класса которые нужно логировать :

RequestLog и ResponseLog

Запрос и ответ !

Есть две таблицы для запроса и ответа RequestLog и ResponseLog .


запрос создается всегда и к нему должен привязаться ответ .
по его первичному ключу , что то явно делаю не так , ибо не работает как описано в документации


Код: 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.
@Entity
public class RequestLog implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;

    public RequestLog() {
    }

    
    
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    
}



Код: 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.
41.
42.
43.
44.
@Entity
public class ResponseLog implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    
    private String param;

    
    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private RequestLog request;
    
    public ResponseLog() {
        
    }

    
    
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getParam() {
        return param;
    }

    public void setParam(String param) {
        this.param = param;
    }

    public RequestLog getRequest() {
        return request;
    }

    public void setRequest(RequestLog request) {
        this.request = request;
    }
}



Вызов :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
          RequestLog request1 = new RequestLog();
          request1.setName("" + (new Date().toLocaleString()));
          requestFacade.create(request1);
          
          
          ResponseLog response1 = new ResponseLog();

          response1.setRequest(request1);
          response1.setParam("param " + (new Date().toGMTString()));
          
          responseFacade.create(response1);




как я понимаю должен создаваться первичный ключ в RequestLog - равный id request1.getId()
но этого не происходит !

в базе даже нет этой связи ? почему.


еще вопрос - я вставил много RequestLog'ов - но не получал ответы ...

не поедут ли у меня ключи?

пробовал выдавало ошибку .

второе :

если съехал ключ в ResponseLog - и он стал больше чем RequestLog ... так же выдает ошибку ?

почему

в чем ошибка ?
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38278844
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
рабочий пример OneToOne тут искал?
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38278860
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
рабочий пример OneToOne тут искал?

искал Просто запутался в простых вещах кто о ком должен знать !

и как это отобразить - казалось бы все просто -

может быть сколько угодно RequestLog записей - и для каких то из них будут существовать ResponseLog записи ...

как это перевести в код ?! вот в чем вопрос !

как я понимаю - у ResponseLog - должен быть ключ - поле request_id

так?
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38278883
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1как это перевести в код ?! вот в чем вопрос !
воспроизвести ЧУЖОЙ пример в коде.
Тут было. Поищи....Адрес был в Персоне
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38278933
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1как это перевести в код ?! вот в чем вопрос !
воспроизвести ЧУЖОЙ пример в коде.
Тут было. Поищи....Адрес был в Персоне

Пример видел , крутил ...

я одного понять не могу ... как заложиться - кто о ком должен знать ...
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279004
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
всегда один ГЛАВНЫЙ.
Сначала Запрос, потом - Ответ. Значит Запрос - главный
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279027
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
всегда один ГЛАВНЫЙ.
Сначала Запрос, потом - Ответ. Значит Запрос - главный

и как это будет в коде? Решил проверить на JoinColumn - индексы и ключ создается в этом варианте ,но !

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
@Entity
public class RequestLog implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    
   
    @OneToOne(mappedBy = "requestLog")
    private ResponseLog responseLog;

    public RequestLog() {
        
    }

    
    
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ResponseLog getResponseLog() {
        return responseLog;
    }

    public void setResponseLog(ResponseLog responseLog) {
        this.responseLog = responseLog;
    }
    
    
    
    
}

@Entity
public class ResponseLog implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    
    private String param;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="request_id") 
    private RequestLog requestLog;

    
    public ResponseLog() {  
        
    }

    
    
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getParam() {
        return param;
    }

    public void setParam(String param) {
        this.param = param;
    }

    public RequestLog getRequestLog() {
        return requestLog;
    }

    public void setRequestLog(RequestLog requestLog) {
        this.requestLog = requestLog;
    }


    
    
    
}


//вызов 


 RequestLog request1 = new RequestLog();
          request1.setName("" + (new Date().toLocaleString()));
          requestFacade.create(request1);
          
          
          ResponseLog response1 = new ResponseLog();
          response1.setParam("param " + (new Date().toGMTString()));
          
          
          response1.setRequestLog(request1);
          
          
          
          responseFacade.create(response1);


в таком виде у таблице response - есть поле request_id

при попытке выполнить responseFacade.create(response1);- вылетает ошибка :

org.hibernate.PersistentObjectException



Код: java
1.
2.
3.
INFO: Hibernate: insert into RequestLog (name) values (?) 

Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: ru.entities.RequestLog....
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279062
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
я тебе 10 раз сказал - посмотри у других ВЫЗОВ.
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279087
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
я тебе 10 раз сказал - посмотри у других ВЫЗОВ.

я нашел пример - сделал как описано - мой не работает ! поэтому и пишу !
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279121
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
а чужой работает? ))))) Типа такого
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
23	        Person person = new Person();
24	        Address address = new Address();
25	        person.setAddress(address);
26	        person.setFirstName(firstName);
27	        person.setLastName(lastName);
28	        address.setCity(city);
29	        address.setFirstString(firstString);
30	        address.setSecondString(secondString);
31	        entityManager.persist(person);
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279559
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Переосмыслили задачу - поэтому внесу уточнения :

при репликации - мы не можем закладываться на id .

Поэтому в классы внесли изменения :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Entity
public class RequestLog implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;

    private Long user_id;

    private Long req_user_id;




user_id и req_user_id должны образовать пару и быть уникальным ключом для каждого RequestLog и ResponseLog


т.е. должны присутствовать в обоих классах и ResponseLog - должен знать о своем RequestLog который его порадил через этот ключ !


как в таком случае в Hibernate описать связь между таблицами ?
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279673
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
попробуй ничего не делать, может оно работает (с)
Atum1при репликации - мы не можем закладываться на id .
обоснуй? Что за репликация?
Ты вроде мешаешь логику БД с Логикой 3-х звенки.
ЗЫ. Хочешь всё железобетонно?
- одна табла для твоих Запрос-Ответ из 2х полей: FieldQ, FiedR
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279795
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
попробуй ничего не делать, может оно работает (с)
Atum1при репликации - мы не можем закладываться на id .
обоснуй? Что за репликация?
Ты вроде мешаешь логику БД с Логикой 3-х звенки.
ЗЫ. Хочешь всё железобетонно?
- одна табла для твоих Запрос-Ответ из 2х полей: FieldQ, FiedR

мне нужно чтобы в таблице RequestLog был уникальный ключ который состоит из двух полей :

private Long user_id;
private Long req_user_id;


и его отбражение в таблице

ResponseLog на поле ключ

private Long req_id


с одной таблицей сделал , но нужно именно реализовать такую схему !
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279951
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
извини, как в анекдоте: "Вам шашечки или ехать?"
- Какая блин разница составной там ключик или нет? Сделай чтобы пример "А" работал. Демку! А потом членораздельно - что в том примере не устраивает.

Я пас - извини. Абстрактно чтобы-было я не умею)
Удачи!
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38279973
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
извини, как в анекдоте: "Вам шашечки или ехать?"
- Какая блин разница составной там ключик или нет? Сделай чтобы пример "А" работал. Демку! А потом членораздельно - что в том примере не устраивает.

Я пас - извини. Абстрактно чтобы-было я не умею)
Удачи!

Хорошо по шагам :

есть таблица - RequestLog в ней есть id - как primary key.
Есть два поля
Long user_id;
Long req_user_id;

есть таблица ResponseLog в ней есть id - как primary key.

а так же есть foreign key - req_id - который является составным ключом из таблицы RequestLog (поля user_id и req_user_id)

требуется замапить все это на классы

и реализовать в коде.

при этом нужно чтобы при создании RequestLog - создавался и ResponseLog
потом нужна функция обновления данных в RequestLog и ResponseLog

но важно чтобы RequestLog и ResponseLog были связаны именно так через составной ключ !
...
Рейтинг: 0 / 0
OneToOne Hibernate Spring Mysql
    #38280032
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1но важно чтобы RequestLog и ResponseLog были связаны именно так через составной ключ !
ну и связывай их руками. Маппинг тут причём? Хибер для изврата не делали.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    Для Person
    - аннотации:
    @NotNull
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn (name = "addressId", referencedColumnName = "id")
    private Address address;
    ------------------------------


    Для Адрес
    - аннотации:
    @NotNull
    @OneToOne (cascade= CascadeType.ALL)
    @JoinColumn (name = "personId", referencedColumnName = "id")
    private Person person;
    ------------------------------

- Для вложенной - @Embedded
- поле personId из сущности Address можно изъять.
- для FOREIGN KEY (personId) REFERENCES Person(id) тоже прописать в Хибер.

ВСЁ. Всё остальное руками в триггерах хибера или руками в базовом классе по ООП.
IMHO
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / OneToOne Hibernate Spring Mysql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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