【问题标题】:How can I use Lombok to generate constructor that takes in only some of the parameters? [duplicate]如何使用 Lombok 生成只接受部分参数的构造函数? [复制]
【发布时间】:2021-12-23 11:05:45
【问题描述】:

我正在使用 SpringBoot 构建 REST API,并且正在使用 Lombok。我有 2 个实体类,它们具有多对多关系,我正在尝试在服务类中创建一个新的 Game 对象,但是当我尝试这样做时,我不知道 id 因为它是自动生成的,所以怎么能我创建了一个没有“gameId”字段的游戏对象?这样我就可以将它保存到数据库中,它会自动生成该 id 吗?

@Entity
@Table(name = "game")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Game {

    private @Id
    @GeneratedValue
    Long gameId;

    //One game can have many players and one player can have many games so many-to-many relationship.
    @ManyToMany
    private Set<User> User;

    private Boolean blueIsWinner;

    private String yesIndeed;

}

游戏服务:

Set<User> users = new HashSet<>();
        users.add(currentUser);
        users.add(opponentUser);
        Game game = new Game(users, true, "yesIndeed");
        Game savedGame = gameRepository.save(game);

如您所见,在此服务中,我试图构造 Game 对象以便可以保存它。我将用户对象添加到集合中。当我尝试构建游戏对象时显然出现错误,有没有办法使用 Lombok 来做到这一点?

谢谢

【问题讨论】:

标签: java spring spring-boot spring-mvc lombok


【解决方案1】:

目前 Lombok 无法实现这一点,但没有什么能阻止您自己创建构造函数:

@Entity
@Table(name = "game")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Game {

    private @Id
    @GeneratedValue
    Long gameId;

    //One game can have many players and one player can have many games so many-to-many relationship.
    @ManyToMany
    private Set<User> User;

    private Boolean blueIsWinner;

    private String yesIndeed;

    public Game(Set<User> user, Boolean blueIsWinner, String yesIndeed) {
        User = user;
        this.blueIsWinner = blueIsWinner;
        this.yesIndeed = yesIndeed;
    }
}

【讨论】:

  • 非常感谢,有道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2021-11-05
相关资源
最近更新 更多