Однонаправленное картографирование одного порядка в одном. - PullRequest
0 голосов
/ 23 июня 2019

У меня есть сопоставление «один ко многим» с классом «Item» в качестве родителя и классом «ItemSizeCost» в качестве дочернего.

Я добавил @OneToMany и @JoinColumn в родительский класс.

Когда я пытаюсь сохранить родительский объект, я вижу спящий вопрос: три SQL-оператора

insert into item (category_id, description, name) values (?, ?, ?)
insert into item_size_cost (cost, item_id, size_id) values (?, ?, ?)
update item_size_cost set item_id=? where id=?

Я хочу понять причину последних двух утверждений (вставить в child и обновить child). После некоторого поиска в Google, я обнаружил, что причина может быть связана со сменой порядка гибернации, но не могу понять полностью. У кого-нибудь есть хорошие ссылки, чтобы понять порядок сброса Hibernate? Любое объяснение будет оценено. Я упоминаю мои занятия ниже -

Item -


    @Entity
@Table(name="item")
public class Item {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="category_id")
    private Category category;

    @Column(name="name")
    private String name;

    @Column(name="description")
    private String description;


    @OneToMany(fetch = FetchType.LAZY, 
            cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
    @JoinColumn(name="item_id")
    List<ItemSizeCost> itemSizeCostList;

    .....
}

ItemSizeCost - 

   @Entity
@Table(name="item_size_cost")
public class ItemSizeCost {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    /*@JoinColumn(name="item_id")*/
    private Item item;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="size_id")
    private Size size;

    @Column(name="cost")
    private double cost;
        ....
}

1 Ответ

0 голосов
/ 23 июня 2019

Причиной последних двух утверждений является двунаправленное отображение и тот факт, что внешний ключ может быть нулевым.

Существует прекрасная статья на эту тему от Влада Михальчи.Он является комиссаром Hibernate: https://vladmihalcea.com/merge-entity-collections-jpa-hibernate/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...