Как добавить еще один объект класса в список - PullRequest
0 голосов
/ 10 октября 2019

У меня есть класс игрока и класс друга, в классе игрока есть объект друга. Но у класса друга также есть те же поля, что и у класса игрока. как добавить список друзей в плеер. Как на Facebook, где у пользователя есть друзья в списке друзей. Как заставить закомментированный метод в классе PlayerController работать?

//@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping(value = "/players", produces = { MediaType.APPLICATION_JSON_VALUE })
public class PlayerController {

    @Autowired
    private PlayerReopsitory playerReopsitory;

    @GetMapping(produces = "application/json")
    public List<Player> getAllPlayers(){
        return playerReopsitory.findAll();
    }

    @PostMapping
//  @ResponseStatus(HttpStatus.OK)
    public void create(@RequestBody Player player) {
        playerReopsitory.save(player);
    }

    @GetMapping("/{id}")
    public Player getOne(@PathVariable("id") Long id) {
        return playerReopsitory.getOne(id);
    }

    @DeleteMapping("/{id}")
    void deletePlayer(@PathVariable Long id) {
        playerReopsitory.deleteById(id);
    }

    @PutMapping("/{id}")
    Player updatePlayer(@RequestBody Player newPlayer, @PathVariable Long id) {

        return playerReopsitory.findById(id).map(player -> {
            player.setName(newPlayer.getName());
            player.setEmail(newPlayer.getEmail());
            player.setPhone(newPlayer.getPhone());
            return playerReopsitory.save(player);
         }).orElseGet(() -> {
                newPlayer.setId(id);
                return playerReopsitory.save(newPlayer);
            });
        }


//  how to make this function work?
//  @GetMapping("/{id}/friends")
//  public List<Friend> getAllFriendFromList(@PathVariable Long id) {
//      return playerReopsitory.findById(id).get();
//  }
//  

}
@Entity
@Table(name= "user", schema = "rabbit")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Friend {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name="userName")
    private String userName;

    @Column(name="playername")
    private String name;

    @Column(name="email")
    private String email;

    @Column(name="phone")
    private String phone;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Friend [id=" + id + ", userName=" + userName + ", name=" + name + ", email=" + email + ", phone="
                + phone + "]";
    }
}

@Entity
@Table(name= "user", schema = "rabbit")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Player {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name="userName")
    private String userName;

    @Column(name="playername")
    private String name;

    @Column(name="email")
    private String email;

    @Column(name="phone")
    private String phone;

    private Friend friend;




    public Friend getFriend() {
        return friend;
    }

    public void setFriend(Friend friend) {
        this.friend = friend;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }



    @Override
    public String toString() {
        return "Player [id=" + id + ", userName=" + userName + ", name=" + name + ", email=" + email + ", phone="
                + phone + ", friend=" + friend + "]";
    }

public interface FriendReopsitory extends JpaRepository<Player, Long> {

}

public interface PlayerReopsitory extends JpaRepository<Player, Long> {

}
@Component
public class FriendService {


    private static Map<Friend, Long> getFriends = new HashMap<>();{

    }
}

1 Ответ

0 голосов
/ 11 октября 2019

Поскольку Друзья также являются игроками, я советую вам реорганизовать вашу модель, чтобы у нее был только один класс Игрока, имеющий отношение многие ко многим.

@Entity
public class Player {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    /*
    * Add other fields
    */

    @ManyToMany()
    @JoinTable(name = "player_friends", joinColumns = {
            @JoinColumn(name = "PLAYER_ID", referencedColumnName = "ID")
    }, inverseJoinColumns = {
            @JoinColumn(name = "FRIEND_ID", referencedColumnName = "ID")
    })
    private List<Player> friends;

    /*
    * Add other getters and setters
    */

    public List<Player> getFriends() {
        return this.friends;
    }

    /*
    * Implement addFriend and removeFriend methods
    */
}

Затем вам нужно будет обработать загрузку коллекции (LAZY или EAGER), добавить и удалить методы друзей. Но это не входит в сферу этого вопроса, и вы можете найти множество ресурсов в Интернете по этой теме.

...