Получить отношения ManyToMany в субъекте, не являющемся владельцем - PullRequest
0 голосов
/ 25 января 2019

Обзор:

Я начинаю изучать Jhipster, поэтому у меня есть два объекта ExtendedUser и Areas, у которых есть отношение ManyToMany, все работает правильно в объекте ExntendedUser, но я хотел бы видеть пользователей, назначенных для каждой области, но не могу сделать мой DTO показывает пользователей.

Мои мысли:

Подумайте, может, я не правильно делаю карту @manyTomany в домене / Area.java

в домене / ExtendedUser.java Я получаю это:

  @ManyToMany
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JoinTable(name = "extended_user_areas",
               joinColumns = @JoinColumn(name = "extended_users_id", referencedColumnName = "id"),
               inverseJoinColumns = @JoinColumn(name = "areas_id", referencedColumnName = "id"))
    private Set<Area> areas = new HashSet<>();
 public Set<Area> getAreas() {
        return areas;
    }

    public ExtendedUser areas(Set<Area> areas) {
        this.areas = areas;
        return this;
    }

    public ExtendedUser addAreas(Area area) {
        this.areas.add(area);
        area.getUsuarios().add(this);
        return this;
    }

    public ExtendedUser removeAreas(Area area) {
        this.areas.remove(area);
        area.getUsuarios().remove(this);
        return this;
    }

    public void setAreas(Set<Area> areas) {
        this.areas = areas;
    }

Но в моем домине / Area.java у меня есть это

@ManyToMany(mappedBy = "areas")
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<ExtendedUser> usuarios = new HashSet<>();

  public Set<ExtendedUser> getUsuarios() {
        return usuarios;
    }

    public Area usuarios(Set<ExtendedUser> extendedUsers) {
        this.usuarios = extendedUsers;
        return this;
    }

    public Area addUsuario(ExtendedUser extendedUser) {
        this.usuarios.add(extendedUser);
        extendedUser.getAreas().add(this);
        return this;
    }

    public Area removeUsuario(ExtendedUser extendedUser) {
        this.usuarios.remove(extendedUser);
        extendedUser.getAreas().remove(this);
        return this;
    }

    public void setUsuarios(Set<ExtendedUser> extendedUsers) {
        this.usuarios = extendedUsers;
    }

в другой руке в exntendedUser DTO У меня есть это:

extendedUserDTO
package com.gits.sigem.service.dto;

import com.gits.sigem.domain.User;
import com.gits.sigem.domain.Area;
import com.gits.sigem.domain.Desarrollo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import java.util.Objects;
import java.util.stream.Collectors;
import org.hibernate.Hibernate;

/**
 * A DTO for the ExtendedUser entity.
 */
public class ExtendedUserDTO extends UserDTO implements Serializable {
    private final Logger log = LoggerFactory.getLogger(ExtendedUserDTO.class);
    private Long id;

    private String puesto;

    private BigDecimal sueldo;

    private LocalDate fechaIngreso;

    private Long usuarioId;

    private Set<Area> areas = new HashSet<>();

    private Set<Desarrollo> desarrollos = new HashSet<>();

    private Long coordinadorId;

    private String coordinadorLogin;

    public ExtendedUserDTO(){

    }

    public ExtendedUserDTO(User user){
        super(user);
        this.puesto = user.getExtendedUser().getPuesto();
        this.sueldo = user.getExtendedUser().getSueldo();
        this.fechaIngreso = user.getExtendedUser().getFechaIngreso();
        this.id = user.getId();
        this.usuarioId = user.getId();
        this.coordinadorLogin = user.getExtendedUser().getCoordinador().getLogin();
        this.coordinadorId = user.getExtendedUser().getCoordinador().getId();
        Hibernate.initialize(user.getExtendedUser().getAreas());
        this.areas = user.getExtendedUser().getAreas();
        Hibernate.initialize(user.getExtendedUser().getDesarrollos());
        this.desarrollos = user.getExtendedUser().getDesarrollos();
    }
    public Long getId() {
        return id;
    }

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

    public String getPuesto() {
        return puesto;
    }

    public void setPuesto(String puesto) {
        this.puesto = puesto;
    }

    public BigDecimal getSueldo() {
        return sueldo;
    }

    public void setSueldo(BigDecimal sueldo) {
        this.sueldo = sueldo;
    }

    public LocalDate getFechaIngreso() {
        return fechaIngreso;
    }

    public void setFechaIngreso(LocalDate fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    public Long getUsuarioId() {
        return usuarioId;
    }

    public void setUsuarioId(Long userId) {
        this.usuarioId = userId;
    }

    public Set<Area> getAreas() {
        return areas;
    }

    public void setAreas(Set<Area> areas) {
        this.areas = areas;
    }

    public Set<Desarrollo> getDesarrollos() {
        return desarrollos;
    }

    public void setDesarrollos(Set<Desarrollo> desarrollos) {
        this.desarrollos = desarrollos;
    }

    public Long getCoordinadorId() {
        return coordinadorId;
    }

    public void setCoordinadorId(Long userId) {
        this.coordinadorId = userId;
    }

    public String getCoordinadorLogin() {
        return coordinadorLogin;
    }

    public void setCoordinadorLogin(String userLogin) {
        this.coordinadorLogin = userLogin;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        ExtendedUserDTO extendedUserDTO = (ExtendedUserDTO) o;
        if (extendedUserDTO.getId() == null || getId() == null) {
            return false;
        }
        return Objects.equals(getId(), extendedUserDTO.getId());
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(getId());
    }

    @Override
    public String toString() {
        return "ExtendedUserDTO{" +
            "id=" + getId() +
            ", puesto='" + getPuesto() + "'" +
            ", sueldo=" + getSueldo() +
            ", fechaIngreso='" + getFechaIngreso() + "'" +
            ", usuario=" + getUsuarioId() +
            ", coordinador='" + getCoordinadorLogin() + "'" +
            "}";
    }
}

и в моей области DTO У меня есть это:

 package com.gits.sigem.service.dto;

    import com.gits.sigem.domain.ExtendedUser;

    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Objects;
    import java.util.Set; 
    /**
     * A DTO for the Area entity.
     */
    public class AreaDTO implements Serializable {

        private Long id;

        private String nombre;

        private String mision;

        private String vision;

        private String valores;

        private String politicaCalidad;

        private String credo;

        private Set<ExtendedUser> usuarios  = new HashSet<>();


        private String principios;

        private Long desarrolloId;



        public Long getId() {
            return id;
        }

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

        public String getNombre() {
            return nombre;
        }

        public void setNombre(String nombre) {
            this.nombre = nombre;
        }

        public String getMision() {
            return mision;
        }

        public void setMision(String mision) {
            this.mision = mision;
        }

        public String getVision() {
            return vision;
        }

        public void setVision(String vision) {
            this.vision = vision;
        }

        public String getValores() {
            return valores;
        }

        public void setValores(String valores) {
            this.valores = valores;
        }

        public String getPoliticaCalidad() {
            return politicaCalidad;
        }

        public void setPoliticaCalidad(String politicaCalidad) {
            this.politicaCalidad = politicaCalidad;
        }

        public String getCredo() {
            return credo;
        }

        public void setCredo(String credo) {
            this.credo = credo;
        }

        public String getPrincipios() {
            return principios;
        }

        public void setPrincipios(String principios) {
            this.principios = principios;
        }

        public Long getDesarrolloId() {
            return desarrolloId;
        }

        public void setDesarrolloId(Long desarrolloId) {
            this.desarrolloId = desarrolloId;
        }

        public Set<ExtendedUser> getUsuarios() {
            return usuarios;
        }

        public void setUsuarios(Set<ExtendedUser> extendedUsers) {
            this.usuarios = extendedUsers;
        }


        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }

            AreaDTO areaDTO = (AreaDTO) o;
            if (areaDTO.getId() == null || getId() == null) {
                return false;
            }
            return Objects.equals(getId(), areaDTO.getId());
        }

        @Override
        public int hashCode() {
            return Objects.hashCode(getId());
        }

        @Override
        public String toString() {
            return "AreaDTO{" +
                "id=" + getId() +
                ", nombre='" + getNombre() + "'" +
                ", mision='" + getMision() + "'" +
                ", vision='" + getVision() + "'" +
                ", valores='" + getValores() + "'" +
                ", politicaCalidad='" + getPoliticaCalidad() + "'" +
                ", credo='" + getCredo() + "'" +
                ", principios='" + getPrincipios() + "'" +
                ", usuarios='" + getUsuarios() + "'" +
                ", desarrollo=" + getDesarrolloId() +
                "}";
        }
   }

Так что я думаю, что, вероятно, я должен использовать Hibernate, чтобы получить пользователей

Вопросы:

  1. Я правильно делаю отношения @manyTomany? в
    Domine / Area.java
  2. как использовать Hibernate в DTO областей, чтобы привлечь пользователей?

Примечания:

  • Как вы видите, я учусь, так что я не знаком с Java, Jhipster, Liquidbase и т.д ... так что если я пропущу важную информацию, пожалуйста закомментируйте это, чтобы я мог добавить это.

  • Я расширяю DTO ExtendedUser пользовательским DTO, потому что Jhipster не позволяет мне редактировать пользовательскую сущность для добавления новых полей, поэтому я сохраняю пользователя и extendedUser одновременно, все работает хорошо в этой части я получаю области, и я могу правильно добавлять и удалять.

...