【发布时间】: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 committed和No 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]->digifred.global.model.Distritos["entidade"]->digifred.global.model.Entidades_$$_jvstfb1_10["municipio"]->digifred.global.model.Municipios_$$_jvstfb1_4["uf"]->digifred.global.model.Ufs_$$_jvstfb1_15["handler"])
标签: java angularjs spring spring-mvc spring-boot