简体   繁体   English

JPA 存储库 Findbyid 返回重复列表

[英]JPA Repository Findbyid Returns Repeated List

I am having a problem with my retriveUser method.我的 retriveUser 方法有问题。 When I run finbyid method it returns the same repeated values.当我运行 finbyid 方法时,它返回相同的重复值。 You can see my repository, user, and userService classes and the result below.您可以在下面看到我的存储库、用户和 userService 类以及结果。

[![findbyid method result][1]][1] [![findbyid 方法结果][1]][1]

My User Repository Class我的用户存储库 Class

package io.javabrains.springsecurity.jpa;
import io.javabrains.*;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


import io.javabrains.springsecurity.jpa.models.User;
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    Optional<User> findByUserName(String userName);

}

My User Class我的用户 Class

@Entity
@Table(name="app_user")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy =GenerationType.IDENTITY)
    private int id;
    private String userName;
    private String password;
    private boolean active;
    private String role;
    private String city;
    
    
    public User(String userName, boolean active, String role, String city) {
        super();
        this.userName = userName;
        this.active = active;
        this.role = role;
        this.city = city;
    }
    
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    
    @JoinTable(name = "user_cities", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), 
    inverseJoinColumns = @JoinColumn(name = "city_id", referencedColumnName = "id"))
    private Collection<UserCity> usercities =  new ArrayList<UserCity>() ;
  
    
    public Collection<UserCity> getUsercities() {
        return usercities;
    }

    public void setUsercities(Collection<UserCity> usercities) {
        this.usercities = usercities;
    }

    public User() {}

    public int getId() {
        return id;
    }   
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public boolean isActive() {
        return active;
    }
    public void setActive(boolean active) {
        this.active = active;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
    
    
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    

}

My Service Class我的服务 Class

@RestController
public class HomeResource {
   @Autowired
   private BCryptPasswordEncoder bcryptPasswordEncoder;
   
   @Autowired
   private WeatherService weatherService;
   
   @Autowired
   private CityRepository cityRepository;
   
   @Autowired
   private UserRepository userRepo;
   
   @GetMapping("/")
   public String home() {
       return ("<h1>Welcome</h1>");
   }

   @GetMapping("/user")
   public String user() {
       return ("Welcome User");
   }

   @GetMapping("/admin")
   public String admin() {
       return ("<h1>Welcome Admin</h1>");

   }
   @GetMapping("/getCities")
   public List<UserCity> getCities()
   {
       return cityRepository.findAll();
   }

   @GetMapping("/users/{id}")    
   public ResponseEntity<User> retriveUser(@PathVariable int id){
   Optional<User> a=userRepo.findById(id);

    return new ResponseEntity<User>(a.get(),HttpStatus.OK);
   
} 

Thanks in advance for your help.在此先感谢您的帮助。

Sincerely [1]: https://i.stack.imgur.com/gNhO7.png此致[1]: https://i.stack.imgur.com/gNhO7.png

The repeated value is a nested user from the usercities collection in a User object.重复值是来自User object 中的usercities集合的嵌套用户。

The user ( id: 1 ) has a usercities collection containing one UserCity object ( cityName: 'bursa' and users containing the same user ( id: 1 )).用户 ( id: 1 ) 有一个usercities集合,其中包含一个 UserCity object ( cityName: 'bursa' and users包含相同的用户 ( id: 1 ))。 Thus, the user ( id: 1 ) is recursively displayed.因此,递归地显示用户( id: 1 )。

You can add @JsonIgnore annotation to your property ( usercities in User or users in UserCity) to cut the recursion.您可以将 @JsonIgnore 注释添加到您的属性( users中的 usercities 或usercities中的用户)以减少递归。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM