Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 JPA存储库Findbyid返回重复列表_Java_Spring_Spring Boot_Spring Data Jpa_Spring Repositories - Fatal编程技术网

Java JPA存储库Findbyid返回重复列表

Java JPA存储库Findbyid返回重复列表,java,spring,spring-boot,spring-data-jpa,spring-repositories,Java,Spring,Spring Boot,Spring Data Jpa,Spring Repositories,我的RetrieveUser方法有问题。当我运行finbyid方法时,它返回相同的重复值。您可以在下面看到我的存储库、用户和用户服务类以及结果 [![findbyid方法结果][1][1] 我的用户存储库类 package io.javabrains.springsecurity.jpa; import io.javabrains.*; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRe

我的RetrieveUser方法有问题。当我运行finbyid方法时,它返回相同的重复值。您可以在下面看到我的存储库、用户和用户服务类以及结果

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

我的用户存储库类

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);

}
包io.javabrains.springsecurity.jpa;
导入io.javabrains.*;
导入java.util.Optional;
导入org.springframework.data.jpa.repository.JpaRepository;
导入org.springframework.stereotype.Repository;
导入io.javabrains.springsecurity.jpa.models.User;
@存储库
公共接口用户存储库扩展了JpaRepository{
可选findByUserName(字符串用户名);
}
我的用户类

@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;
    }
    

}

@实体
@表(name=“app\u用户”)
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
私有字符串用户名;
私有字符串密码;
私有布尔活动;
私有字符串角色;
私人城市;
公共用户(字符串用户名、布尔活动、字符串角色、字符串城市){
超级();
this.userName=用户名;
这个.active=active;
this.role=角色;
this.city=城市;
}
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.PERSIST)
@JoinTable(name=“user\u cities”,joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“city\u id”,referencedColumnName=“id”))
私有集合usercities=new ArrayList();
公共集合getUsercities(){
返回用户城市;
}
公共void setUsercities(集合用户城市){
this.usercities=用户城市;
}
公共用户(){}
公共int getId(){
返回id;
}   
公共无效集合id(内部id){
this.id=id;
}
公共字符串getUserName(){
返回用户名;
}
public void setUserName(字符串用户名){
this.userName=用户名;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共布尔isActive(){
主动返回;
}
public void setActive(布尔激活){
这个.active=active;
}
公共字符串getRole(){
返回角色;
}
公共void setRole(字符串角色){
this.role=角色;
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
}
我的服务班

@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);
   
} 
@RestController
公共类家庭资源{
@自动连线
专用BCryptPasswordEncoder BCryptPasswordEncoder;
@自动连线
私人气象服务;
@自动连线
私人城市储蓄所城市储蓄所;
@自动连线
私有用户存储库userRepo;
@GetMapping(“/”)
公共字符串home(){
返回(“欢迎”);
}
@GetMapping(“/user”)
公共字符串用户(){
返回(“欢迎用户”);
}
@GetMapping(“/admin”)
公共字符串管理(){
返回(“欢迎管理员”);
}
@GetMapping(“/getCities”)
公共列表(城市)
{
return cityRepository.findAll();
}
@GetMapping(“/users/{id}”)
public ResponseEntity检索用户(@PathVariable int-id){
可选a=userRepo.findById(id);
返回新的ResponseEntity(a.get(),HttpStatus.OK);
} 
提前感谢你的帮助

诚恳
[1] :

重复值是
user
对象中
usercities
集合中的嵌套用户

用户(
id:1
)有一个
usercities
集合,其中包含一个UserCity对象(
cityName:'bursa'
users
包含同一个用户(
id:1
)。因此,用户(
id:1
)被递归显示

您可以在属性中添加@JsonIgnore注释(
usercities
在User中或
users
在UserCity中)以剪切递归