Как правильно сопоставить отношения OneToMany в Spring Boot? - PullRequest
0 голосов
/ 08 февраля 2020

Здравствуйте, я работаю над проектом Spring Boot, и я немного запутался. У меня есть сущность Product и сущность Property, и они выглядят так:

public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long id;

    @Column
    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Property> properties;
//getters and setters omitted
}
public class Property {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long id;

    @Column
    private String name;

    @Column
    private String value;
//getters and setters omitted
}

Теперь мне интересно, нужно ли мне также указывать отношение ManyToOne в сущности Propery или это достаточно хорошо? В моих прошлых проектах, в которых я пытался использовать отношения в обеих сущностях (двунаправленные), и это заканчивалось беспорядком, потому что я часто застревал в «бесконечном l oop» данных при попытке извлечь их из моего интерфейса. Мне нужны только однонаправленные и простые отношения, в которых один продукт может иметь много свойств, а затем я могу получить данные с помощью метода getProperties (). Я правильно понимаю, или мой код достаточно хорош для того, что я пытаюсь сделать?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2020

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

Не существует «хорошей» реализации, универсально хорошей, просто решение, которое больше соответствует вашим потребностям, и его проще всего поддерживать.

0 голосов
/ 09 февраля 2020
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long id;

    @Column
    private String name;

    @OneToMany(mappedBy = "product" ,cascade = CascadeType.ALL)
    private List<Property> properties;
}


public class Property {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long id;

    @Column
    private String name;

    @Column
    private String value;

    @ManyToOne
    private Product prodcut;
}

Вы также должны аннотировать множество частей отношений (@ManyToOne). И вы должны также указать в сущности Product, что сущность Property будет выполнять сопоставление в БД ( @OneToMany(mappedBy = "product" ,cascade = CascadeType.ALL)).

. Проверьте приведенный выше код на наличие модификаций.

0 голосов
/ 08 февраля 2020

Если у вас есть однонаправленная ассоциация @OneToMany, это означает, что вы можете получить доступ только к родительской стороне, где находится внешний ключ. Подробнее здесь

Двунаправленные ассоциации всегда должны обновляться с обеих сторон, поэтому родительская сторона должна содержать комбинацию addChild и removeChild. Эти методы гарантируют, что мы всегда синхронизируем обе стороны ассоциации, чтобы избежать проблем повреждения объектов или реляционных данных.

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