java - 如何将另一个类对象添加到列表中

标签 java spring-boot spring-data-jpa crud

我有一个玩家类和 friend 类,玩家类中有 friend 对象。但 friend 类别也具有与玩家类别相同的字段。如何将好友列表添加到玩家。就像在 Facebook 上一样,用户的 friend 列表中有 friend 。如何使 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<>();{

    }
}

最佳答案

由于 friend 也是玩家,我建议您重构您的模型,使其只有一个玩家类,与其自身具有多对多的关系。

@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)、添加和删除友元方法。但这不属于本问题的范围,您可以在网上找到有关此主题的大量资源。

关于java - 如何将另一个类对象添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58315170/

相关文章:

jpa - 父接口(interface)上的 Spring Data JPA JPQL 查询

java - 使用 HttpUrlConnection 在没有中间证书的情况下建立 SSL 连接

java - 使用 EndpointInterceptor 从 SOAP 请求中删除空 ns 属性

java - Spring-boot UTF-8 资源

spring - 使用 Cron 安排任务,允许动态更新

java - 如何处理 "Transaction was marked for rollback only; cannot commit; "问题?

查询方法中的 Spring Data 可选参数

java - 如何使 Scanner.next() 保留最后一个 "\n"?

java - FFMPEG 命令不适用于 Android 10

java - 如何使用 ByteBuddy 创建未绑定(bind)泛型类型的代理?