我正在学习spring-boot jpa,并开始对事情如何工作的感觉不幸的是,我遇到了一些困难。我的示例应用程序是如此简单,只有三个实体,即MemberInfo,MemberProfile,MemberTalents。
我的实体代码如下所示:
@Entity
@Table(name="member_info")
public class MemberInfo {
//...
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="memberProfileId")
private MemberProfile memberProfile;
// getters and setters
}
@Entity
@Table(name="member_profile")
public class MemberProfile {
//...
@OneToOne(mappedBy="memberProfile")
private MemberInfo memberInfo;
@OnetoMany(mappedBy="memberProfile")
private Set<MemberTalent> memberTalent = new Hashset<>();
// getters and setters
public void addMemberTalent(MemberProfile memberProfile) {
memberTalent.add(memberProfile);
}
}
@Entity
@Table(name="member_talent")
public class MemberTalent {
//...
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name="memberProfileId")
private MemberProfile memberProfile;
// getters and setters
}
我成功地为这个实体配置了MySQL,并在本地主机上运行,并使用此格式在Postman中发送POST命令。
{
"memberUserId": 1,
"memberUser": "John69",
"memberEmail": "John@gmail.com",
"memberProfile": {}
}
我得到了这样的回应。
[
{
"memberUserId": 1,
"memberUser": "John69",
"memberserEmail": "John@gmail.com",
"memberProfile": {
"memberProfileId": 1,
"memberName": null,
"memberAddress": null,
"memberTalent": []
}
}
]
现在,使用Put命令,我设法编辑了id=1的memberProfile,使用此命令。
{
"memberProfileId": 1,
"memberName": "John Doe",
"memberAddress": "doe@moon.com",
}
我得到的回应是
{
"memberUserId": 1,
"memberUser": "John69",
"memberserEmail": "John@gmail.com",
"memberProfile": {
"memberProfileId": 1,
"memberName": "John Doe",
"memberAddress": "doe@moon.com",
"memberTalent": null
}
现在,我的挑战是填满成员人才名单。这是我想出的代码。
@PostMapping("/{memberProfileId}/talents")
MemberProfile addNewTalent(@PathVariable long memberProfileId, @RequestBody
MemberTalent memberTalent) {
MemberProfile memberProfile = memberProfileService.findById(memberProfileId);
memberProfile.addMemberTalent(memberTalent);
return memberProfileService.save(memberProfile);
}
不幸的是,它不会添加任何东西到memberTalent列表中。如果有人能帮助我,我将非常感谢。谢谢。
正在更新:
下面是我在PostMapping中发送的API主体:
{
"memberTalent": "Guitar",
"memberMastery": "Expert"
}
下面是响应。即使我发送很多Post请求,响应也是一样的。
{
"memberUserId": 1,
"memberUser": "John69",
"memberserEmail": "John@gmail.com",
"memberProfile": {
"memberProfileId": 1,
"memberName": "John Doe",
"memberAddress": "doe@moon.com",
"memberTalent": [
{
"memberTalentId": 0,
"memberTalent": null,
"memberMastery": null
}
]
}
1条答案
按热度按时间wfveoks01#
您将返回
memberProfileService.save(memberProfile)
&根据保存代码,它将返回em.merge
:当您返回合并时,它不会返回整个实体。因此,您必须使用以下代码来正确返回整个实体: