使用Spring的RepositoryRestResource添加具有关系的新实体

时间:2017-02-15 16:06:50

标签: java spring spring-data spring-data-rest

所以我有User

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String username;
    private String password;
    @OneToOne
    private Email email;

    //getters setters, constructors
}

我有Email,即:

@Entity
public class Email {
    @Id
    @GeneratedValue
    private Integer id;
    private String address;

    //getters setters, constructors
}

他们都有自己的CrudRepository,注明RepositoryRestResource

我的问题是:我应该向https://localhost:8443/users提供哪个请求正文,如果我想同时创建新用户和新电子邮件与该用户的电子邮件关系?我试过了,但是它使用null email_id:

创建新用户
{
    "username" : "test",
    "password" : "test",
    "email" : {
        "address" : "olol@lol.kek"
    }
}

1 个答案:

答案 0 :(得分:0)

想出来了!

以下是它的外观,用户:

@Entity
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Getter
    @Setter
    private Integer id;

    @Getter
    @Setter
    private String username;

    @Getter
    @Setter
    private String password;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "email_id")
    @Getter
    @Setter
    private Email email;
}

电子邮件:

@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Email {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Getter
    @Setter
    private Integer id;

    @Getter
    @Setter
    private String address;

    @OneToOne(mappedBy = "email")
    @Getter
    @Setter
    private User user;

    public Email(String address) {
        this.address = address;
    }
}

你必须向两者添加@OneToOne注释,并为依赖实体提供mappedBy等参数,为所有者提供@JoinColumn注释。此外,有必要为String添加Email参数的构造函数,以便可以在运行时调用它(我猜其实它是“除 id ”之外的所有构造函数)。

然后我只是在POST请求中将此JSON发送到https://localhost:8443/users

{
    "username" : "test",
    "password" : "test",
    "email" : "lolkek@cheburek.com"
}

它会在数据库中创建新用户,并为该用户创建一个包含该地址的新电子邮件。

相关问题