所以我有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"
}
}
答案 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"
}
它会在数据库中创建新用户,并为该用户创建一个包含该地址的新电子邮件。