Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我使用多通,一通,在获取数据时有无止境的循环_Java_Json_Hibernate - Fatal编程技术网

Java 我使用多通,一通,在获取数据时有无止境的循环

Java 我使用多通,一通,在获取数据时有无止境的循环,java,json,hibernate,Java,Json,Hibernate,我在hibernate中使用manyTone和OneToMany。我想创建一个有位置的用户。 当我在postman中获取数据时,我有一个无休止的循环,因为当我获取用户时,它显示用户的位置,在位置中显示用户,等等。以下是代码: 地点类别: @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL) @JoinColumn(name=FLD_LOC, nullable=false) private Consumer co

我在hibernate中使用manyTone和OneToMany。我想创建一个有位置的用户。 当我在postman中获取数据时,我有一个无休止的循环,因为当我获取用户时,它显示用户的位置,在位置中显示用户,等等。以下是代码:

地点类别:

 @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name=FLD_LOC, nullable=false)
    private Consumer consumers;

    public Consumption(String location, float consumpiton,Consumer consumer) {
        this.location = location;
        this.consumpiton = consumpiton;
        this.consumers=consumer;

    }
用户类别:

@OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
private List<Consumption> locations ;


public Consumer(String clientId, String name,String location, float pwConsumption, String email, String password, String roles) {
    super(clientId, name, email, password, roles);
    this.locations=new ArrayList<>();
    this.location=location;
    this.pwcons=pwConsumption;

}

如何让它在JSON位置中仅显示位置或id的部分名称?

问题

当您必须使用双向关系序列化对象时,这是一个常见问题

解决方案

当面对双向关系时,向序列化程序发出停止位置的信号

  • 第一种方法是创建自定义DTO并从rest控制器返回它们。在DTO中,您将使用
    locationDto
    s填充
    customerDto
    location
    字段,但将
    locationDto的
    customer
    字段设置为空

  • 第二种方法不太可取。但是我们可以通过添加
    @JsonManagedReference
    @JsonBackReference
    告诉Jackson库不要递归地序列化它

    • 替换
    注意:


    在生产系统中,我们不公开域对象的所有字段,因为它可以有许多不应该对外公开的内部字段。这就是原因,第一种方法是首选的

    添加
    @JsonIgnore
    而不是
    私人列表位置
    @Andronicus谢谢你的评论,我使用了下面的答案
    "id": 2,
            "version": 1,
            "updated": "2020-06-28T15:41:49.082",
            "clientId": "admin",
            "name": "admin",
            "email": "admin123@gmail.com",
            "password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
            "active": true,
            "roles": "ROLE_ADMIN",
            "locations": [
                {
                    "locationsid": 1,
                    "location": "Pecs",
                    "consumpiton": 0.0,
                    "consumers": {
                        "id": 2,
                        "version": 1,
                        "updated": "2020-06-28T15:41:49.082",
                        "clientId": "admin",
                        "name": "admin",
                        "email": "admin123@gmail.com",
                        "password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
                        "active": true,
                        "roles": "ROLE_ADMIN",
                        "locations": [
                            {
                                "locationsid": 1,
                                "location": "Pecs",
                                "consumpiton": 0.0,
                                "consumers": {
                                    "id": 2,
                                    "version": 1,
                                    "updated": "2020-06-28T15:41:49.082",
                                    "clientId": "admin",
                                    "name": "admin",
                                    "email": "admin123@gmail.com",
                                    "password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
                                    "active": true,
                                    "roles": "ROLE_ADMIN",
                                    "locations": [
                                        {
                                            "locationsid": 1,
                                            "location": "Pecs",
    
       @OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
       private List<Consumption> locations ;
    
            with
    
        @OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
        @JsonManagedReference
        private List<Consumption> locations ;
    
        @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
        @JoinColumn(name=FLD_LOC, nullable=false)
        private Consumer consumers;
    
           with
    
        @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
        @JoinColumn(name=FLD_LOC, nullable=false)
        @JsonBackReference
        private Consumer consumers;