Для отображения таблицы требуется класс загрузочного домена Spring - PullRequest
0 голосов
/ 21 сентября 2018

Я новичок в Spring Boot.У меня есть таблица (Team), которая имеет ресурсы, я храню в отдельной таблице (Resources) и имею таблицу сопоставления team_resource (с полями teamid, resourceid).Мой вопрос должен ли я иметь класс домена для mapping_table тоже?

Когда я вставляю новую команду (POST) с ресурсами, я создаю запись во всех 3 таблицах.Я использую шаблон фасада / дао для записи / чтения в БД.Я должен справиться, когда команда изменена / удалена.Нужно ли иметь класс домена для mapping_table?

1 Ответ

0 голосов
/ 21 сентября 2018

Существует несколько подходов, с которыми вы можете справиться

Подход 1

Определите @ManyToMany между вашей командой и ресурсами, как это:

  1. В объекте команды

    @ManyToMany(fetch = FetchType.LAZY,
        cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
        })
    @JoinTable(name = "resources",
        joinColumns = { @JoinColumn(name = "id") },
        inverseJoinColumns = { @JoinColumn(name = "id") })
    private Set<Resources> resources= new HashSet<>();
    
  2. В объекте ваших ресурсов:

     @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                CascadeType.PERSIST,
                CascadeType.MERGE
            },
            mappedBy = "resources")
    private Set<Team> teams= new HashSet<>();
    

Подход 2

@Entity
@Table(name = "team_resources")
public class TeamResources implements Serializable {

    @EmbeddedId
    private TeamResourcesId id;

    @ManyToOne
    @JoinColumn(name = "team_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Team team;

    @ManyToOne
    @JoinColumn(name = "resources_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Resources resources;

    public TeamResources (Team u, Resources r) {
        // create primary key
        this.id = new TeamResourcesId (u.getUserId(), q.getQuestionId());

        // initialize attributes
        this.user = u;
        this.question = q;
    }

    @Embeddable
    public static class TeamResourcesId implements Serializable {

        @Column(name = "team_id")
        protected Long teamId;

        @Column(name = "resources_id")
        protected Long resourcesId;

        public TeamResourcesId () {

        }

        public TeamResourcesId (Long teamId, Long resourcesId) {
            this.teamId= teamId;
            this.resourcesId= resourcesId;
        }
  //Getter , setter. equal and hash
}

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

...