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

Код: 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.
import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;
 
import static javax.persistence.GenerationType.IDENTITY;
 
@Entity
public class Query implements Serializable{
    private int id;
    private String name;
    private String settings;
    private boolean blocked;
    private boolean deleted;
    private User user;
 
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id")
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    @Column(name = "name")
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Column(name = "settings")
    public String getSettings() {
        return settings;
    }
 
    public void setSettings(String settings) {
        this.settings = settings;
    }
 
    @Column(name = "is_blocked")
    public boolean isBlocked() {
        return blocked;
    }
 
    public void setBlocked(boolean blocked) {
        this.blocked = blocked;
    }
 
    @Column(name = "is_deleted")
    public boolean isDeleted() {
        return deleted;
    }
 
    public void setDeleted(boolean deleted) {
        this.deleted = deleted;
    }
 
    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "owner_id")
    public User getUser() {
        return user;
    }
 
    public void setUser(User user) {
        this.user = 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.
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.
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import ru.nahodka.bi.hibernate.JSONUserType;
 
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
 
import static javax.persistence.GenerationType.IDENTITY;
 
 
@Entity
@Table(name = "_user")
public class User implements Serializable {
    private int id;
    private String login;
    private String passwordHash;
    private String passwordSalt;
    private String name;
    private String family;
    private String patronymic;
    private boolean deleted;
 
    private Set<Query> queries;
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id")
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    @Column(name = "login")
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    @Column(name = "password_hash")
    public String getPasswordHash() {
        return passwordHash;
    }
 
    public void setPasswordHash(String passwordHash) {
        this.passwordHash = passwordHash;
    }
 
    @Column(name = "password_salt")
    public String getPasswordSalt() {
        return passwordSalt;
    }
 
    public void setPasswordSalt(String passwordSalt) {
        this.passwordSalt = passwordSalt;
    }
 
    @Column(name = "name")
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Column(name = "family")
    public String getFamily() {
        return family;
    }
 
    public void setFamily(String family) {
        this.family = family;
    }
 
    @Column(name = "patronymic")
    public String getPatronymic() {
        return patronymic;
    }
 
    public void setPatronymic(String patronymic) {
        this.patronymic = patronymic;
    }
 
    @Column(name = "is_deleted")
    public boolean isDeleted() {
        return deleted;
    }
 
    public void setDeleted(boolean deleted) {
        this.deleted = deleted;
    }
 
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval=true)
    public Set<Query> getQueries() {
        return queries;
    }
 
    public void setQueries(Set<Query> queries) {
        this.queries = queries;
    }
}



при удалении объекта Query получаю ошибку:

org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [...User#15]
если поменять у Query:
cascade = {CascadeType.ALL} на что то другое, что при сохранении Query получаю ошибку:
org.postgresql.util.PSQLException: ERROR: null value in column "owner_id" violates not-null constraint

Сохранение:
Код: java
1.
sessionFactory.getCurrentSession().save(query);


Удаление:
Код: java
1.
sessionFactory.getCurrentSession().delete(query);



Как решить данную ситуацию?
...
Рейтинг: 0 / 0
hibernate работа с @ManyToOne
    #39048359
xifr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KTOIA,

Если вы делаете в одной сессии save и delete
то или перезагружай объект перед удалением, или вместо save делай persist.
...
Рейтинг: 0 / 0
hibernate работа с @ManyToOne
    #39048797
KTOIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xifr,
нет, я делаю это в разных сессиях
...
Рейтинг: 0 / 0
hibernate работа с @ManyToOne
    #39048955
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KTOIAxifr,
нет, я делаю это в разных сессиях
в разных что? Один и тот же объект?
Возьмите демку по вашему маппингу с примером кода.
Hello World ManyToOne
...
Рейтинг: 0 / 0
hibernate работа с @ManyToOne
    #39050775
KTOIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123в разных что? Один и тот же объект?

один и тот же объект в разных сессиях, каждое действие, удаление, создание, происходит в отдельном @test

Petro123Возьмите демку по вашему маппингу с примером кода.
Hello World ManyToOne


так и сделал, я взял исходники от учебника со Spring, там отдельная глава для hibernate, та же самая проблема

вот что я понял: если я хочу создать объект Query, то необходимо взять объект User и добавить к нему новый объект Query и обновить User. Если попытаться создать Query, то в поле User при insert в Sql не проставляется user_id, хотя в объекте Query был указан User, это все происходит если у Query:
Код: java
1.
2.
3.
4.
5.
    @ManyToOne
    @JoinColumn(name = "owner_id")
    public User getUser() {
        return user;
    }



если к нему добавить
Код: java
1.
@ManyToOne(cascade = {CascadeType.ALL})

, то при удалении будет ошибка:
Код: java
1.
org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [...User#15]



и мне интересно, есть ли решение, при котором можно создавать Query, указав существующий User и не получить проблему с удалением Query
...
Рейтинг: 0 / 0
hibernate работа с @ManyToOne
    #39050793
KTOIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разобрался, выше написано много бреда :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate работа с @ManyToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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