Сохранение не работает, когда ManyToOne используется с таблицей отношений OneToMany через - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть 3 объекта: Пользователь, Заказ, Элемент с таким отображением:

@Entity
public class Item {
    @Id
    @Access(AccessType.PROPERTY)
    private long id; // item id predefined

    //..getters and setters
}

@Entity
public class Client {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    //...getters and setters
}

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    @Access(AccessType.PROPERTY)
    private Long id;

    @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = {
        CascadeType.PERSIST, CascadeType.MERGE,
        CascadeType.REFRESH, CascadeType.DETACH
    })// without removing
    //@JoinColumn(name = "client_id") - works fine
    @JoinTable(name = "client_cr_order_cr_item",
        joinColumns = @JoinColumn(name = "order_id"),
        inverseJoinColumns = @JoinColumn(name = "client_id"))
    private Client client;

    @NotEmpty
    @OneToMany(fetch = FetchType.LAZY, cascade = {
        CascadeType.PERSIST, CascadeType.MERGE,
        CascadeType.REFRESH, CascadeType.DETACH
    })// without removing
    @JoinTable(name = "client_cr_order_cr_item",
        joinColumns = @JoinColumn(name = "order_id"),
        inverseJoinColumns = @JoinColumn(name = "item_id"))
    private List<Item> items;

    //...getters and setters
}

При сохранении заказа происходит сбой с ошибкой:

ОШИБКА: нулевое значение в столбце "item_id" нарушает ненулевое ограничение

он генерирует запрос следующим образом:

insert into client_cr_order_cr_item (client_id, order_id) values ()

т.е. он не заполняет полеgment_id по какой-то причине, которую я не знаю. Но я обращаюсь к клиенту не через 3-ю таблицу, а используя FK @JoinColumn(name = "client_id"), тогда он генерирует правильный запрос:

insert into order_cr_item (order_id, item_id) values ()

Пожалуйста, не могли бы вы объяснить это поведение? Почему отображение клиентов влияет на элементы? Есть ли какой-нибудь намек на то, чтобы hibernate сохранял предметы в 3-й таблице?

...