【问题标题】:Result of the method GET brings all relations and subrelations方法 GET 的结果带来所有关系和子关系
【发布时间】:2018-03-18 04:43:40
【问题描述】:

我有一个应用程序,其中有一个列表屏幕

我在我的 API Spring boot 中做一个方法

类控制器

@RequestMapping(method = RequestMethod.GET, value = "/distritos", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Collection<Distritos>> buscarTodosDistritos() {
        Collection<Distritos> distritosBuscados = distritosService.buscarTodos();
            return new ResponseEntity<>(distritosBuscados, HttpStatus.OK);
    } 

一流的服务

public Collection<Distritos> buscarTodos(){
                return distritosRepository.findAll();
            } 

类存储库

@Repository
public interface DistritosRepository extends JpaRepository<Distritos, Integer> {

} 

类实体

@Entity
@Table(name = "distritos", schema="glb")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Distritos.findAll", query = "SELECT d FROM Distritos d"),
    @NamedQuery(name = "Distritos.findByIdDistrito", query = "SELECT d FROM Distritos d WHERE d.idDistrito = :idDistrito"),
    @NamedQuery(name = "Distritos.findByNome", query = "SELECT d FROM Distritos d WHERE d.nome = :nome"),
    @NamedQuery(name = "Distritos.findByCodigoDne", query = "SELECT d FROM Distritos d WHERE d.codigoDne = :codigoDne"),
    @NamedQuery(name = "Distritos.findByFlagAtivo", query = "SELECT d FROM Distritos d WHERE d.flagAtivo = :flagAtivo")})



@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idDistrito", scope= Distritos.class)        
public class Distritos implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_distrito")
    private int idDistrito;


    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 70)
    @Column(name = "nome")
    private String nome;


    @Size(max = 8)
    @Column(name = "codigo_dne")
    private String codigoDne;


    @Column(name = "flag_ativo")
    private Integer flagAtivo;


    @JoinColumn(name="idEntidade")
    @ManyToOne
    private Entidades entidade;


    @JoinColumn(name="idMunicipio")
    @ManyToOne(optional = false)
    private Municipios municipio;


    @JoinColumn(name="idUf")
    @ManyToOne(optional = false)
    private Ufs uf;

    public Distritos() {
    }

   gets and sets....
   } 

在我的前端js中我有这个

carregarDados = function() {

        token = localStorage.getItem("userToken");

        $http({
            method : 'GET',
            url : 'http://localhost:8080/user/distritos'
        }).then(function(response) {
            $scope.distritos = response.data;

        }, function(response) {
            console.log(response.data);
            console.log(response.status);
        });
    }; 

问题是 GET 方法的返回带来了所有的关系,导致过度延迟,以及它们的子关系,我只需要 Estado 的名称、Municipio 的名称和 Eentidade 的名称。

奇怪的是,数组的第二个列表的结果恰好带来了我需要的信息,而没有子关系。

看图。

【问题讨论】:

  • 尝试懒惰的关系
  • 怎么做?
  • @EduardoKrakhecke @ManyToOne(optional = false,fetch=FetchType.LAZY)
  • 我试了一下,我得到了这个错误 Cannot call sendError() after the response has been committedNo serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[0]-&gt;digifred.global.model.Distritos["entidade"]-&gt;digifred.global.model.Entidades_$$_jvstfb1_10["municipio"]-&gt;digifred.global.model.Municipios_$$_jvstfb1_4["uf"]-&gt;digifred.global.model.Ufs_$$_jvstfb1_15["handler"])

标签: java angularjs spring spring-mvc spring-boot


【解决方案1】:

错误出现在我的相关类中,例如在 municipio、entidade 和 uf 中,我有一个 @OneToMany 映射,而在这些类中,更多的 @OneToMany 映射是不必要的。因此,当我在 distritos 中执行 GET 时,我得到了所有映射的响应,包括不必要的双向映射,从而导致速度变慢。

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多