Попытка объединить таблицы, сгенерированные JPA - PullRequest
0 голосов
/ 12 марта 2019

Я работаю с Spring boot 2.1.3.RELEASE на mysql8 SGBD.

Я генерирую свои таблицы автоматически из аннотированной модели, которую я написал.Но я думаю (это означает, что я не уверен), я могу объединить две таблицы в этом случае, но я не знаю как?

Вот модель:

@Entity(name = "met")
@Access(AccessType.PROPERTY)
public class Met {

    enum Categorie { CATEGORIE_1, CATEGORIE_2 }

    private long id;
    private Set<Prof> profs;

    private Met() {}

    @Id
    @GeneratedValue
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @OneToMany
    @JoinColumn(name = "met_id")
    public Set<Prof> getProfs() {
        return profs;
    }

    public void setProfs(Set<Prof> profs) {
        this.profs = profs;
    }

    @Entity(name = "comp")
    @Access(AccessType.PROPERTY)
    public static class Comp {

        private long id;

        private Comp() {}

        @Id
        @GeneratedValue
        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }
    }

    @Entity(name = "prof")
    @Access(AccessType.PROPERTY)
    public static class Prof {

        private ProfPK profPk;
        private List<Comp> comps;

        private Prof() {}

        @EmbeddedId
        public ProfPK getProfPk() {
            return profPk;
        }

        public void setProfPk(ProfPK profPk) {
            this.profPk = profPk;
        }

        @ManyToMany
        public List<Comp> getComps() {
            return comps;
        }

        public void setComps(List<Comp> comps) {
            comps = comps;
        }

        @Embeddable
        public static class ProfPK implements Serializable {

            private Met met;
            private Categorie categorie;

            private ProfPK() {}

            @ManyToOne
            public Met getMet() {
                return met;
            }

            public void setMet(Met met) {
                this.met = met;
            }

            @Enumerated(EnumType.STRING)
            public Categorie getCategorie() {
                return categorie;
            }

            public void setCategorie(Categorie categorie) {
                this.categorie = categorie;
            }

            @Override
            public boolean equals(Object o) {
                if (this == o) return true;
                if (!(o instanceof ProfPK)) return false;

                ProfPK profPK = (ProfPK) o;

                return met.equals(profPK.met) && categorie == profPK.categorie;
            }

            @Override
            public int hashCode() {
                return 31 * met.hashCode() + categorie.hashCode();
            }
        }

    }
}

И вот таблицы, которые я получаю:

   +-----------------+            +------------------+     
   | met             |            | comp             |     
   |-----------------|            |------------------|     
   | id    bigint(20)|            | id    bigint(20) |     
   +-----------------+            +------------------+     
             |                              |              
             |                              |              
             |                              |              
  +--------------------------+              |              
  | prof                     |              |              
  |--------------------------|               \             
  | categorie    varchar(255)|               |             
  | met_id       bigint(20)  |               |             
  +--------------------------+               |             
               \-                            |             
                 \-                          |             
                   \-     +-------------------------------+
                     \-   | prof_comps                    |
                       \- |-------------------------------|
                         \| prof_categorie    varchar(255)|
                          | prof_met_id       bigint(20)  |
                          | comp_id           bigint(20)  |
                          +-------------------------------+

Я думаю, что возможно объединить таблицы prof и prof_comps.Но я не знаю, как это сделать.Я ищу решение по аннотации.Я думаю, что я уже сделал такие вещи, используя @JoinColumn или @JoinTable, но все мои попытки ничего не меняют.

Спасибо за вашу помощь

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