Односторонняя связь Hibernate

569
17 августа 2017, 21:04

У меня есть три сущности User, Item и Category. User:

@Entity
@Table(name="users")
public class User {
    @Id @GeneratedValue
    @Column(name="id")
    private int id;
    @Column(name="login")
    private String login;
    @Column(name="email")
    private String email;
    @Column(name="password")
    private String password;
    @Column(name="mobilePhone")
    private String mobilePhone;
    @Column(name="firstName")
    private String firstName;
    @Column(name="secondName")
    private String secondName;
    @Column(name="address")
    private String address;
    @Column(name="admin")
    private boolean admin;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(
            name="users_items",
            joinColumns = @JoinColumn(name="user_id"),
            inverseJoinColumns = @JoinColumn(name="item_id")
    )
    private List<Item> cart = new ArrayList<Item>(0);
//гетери сетери ко всем полям

Item:

@Entity
@Table(name = "items")
public class Item {
    @Id @GeneratedValue
    @Column(name="id")
    private int product_id;
    @Column(name="name")
    private String name;
    @Column(name="descr")
    private String descr;
    @Column(name="price")
    private int price;
    @Lob
    @Column(name="image")
    private byte[] image;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "category_id")
    private Category category;
//гетери сетери ко всем полям.

Category:

@Entity
@Table(name="categories")
public class Category {
    @Id @GeneratedValue
    @Column(name="category_id")
    private int id;
    @Column(name="name")
    private String name;
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "category")
    private List<Item> items;
//гетери сетери для все полей кроме `items`

Вопрос в том, когда я удаляю Item с бд, то с ним и удаляеться соответсвующая запись в таблице Category, что не должно случаться. Канешно, я могу получить список продуктов определенной категории и удалить из нее желаемий обьект, но как ви заметили, в модели Category есть гетери и сетери для все полей кроме списка Items определенной категории. Если я добавлю туда етот метод, тогда при попитке получить всех User или всех Item или всех Category, начинаеться рекурсивное обращение Item-Category-Item-Category и получаю ошибку StackOverflow.

Как мне реализировать маппинг, что б при удалении Item не удалялось Category?

READ ALSO
Как получить имя переменной и вывести?

Как получить имя переменной и вывести?

Необходимо вывести имя лучшего бомбардираКак это можно сделать?

353
Java, JDBC. SELECT с переменной и цикл

Java, JDBC. SELECT с переменной и цикл

Использую Java, JDBC, PreparedStatementНеобходимо селектнуть из базы данных 1 запись

273
Системе не удается найти указанный путь

Системе не удается найти указанный путь

ЗдравствуйтеПрохожу интересные туториалы и с одним примером непонятка

297
виснет на CloseSession

виснет на CloseSession

В проекте используется EDSDK и edskd4jПоявляется проблема с камерой, если все работает хорошо, то при фотографировании выводит в консоль следующее...

248