我是春季靴的新手。我有两个模型类Party(父)和PartyCategory(子)。 PartyCategory成功存储数据ID,labelAr和labelEn。
现在,我在json请求中传递子ID,并在json响应中获取labelAr和labelEn的空值,如下所示。有人可以帮忙什么,做错什么。
我也粘贴了我的代码。
Json Request:
{
"name": "Party A",
"description": "Description of Party A",
"category": {
"id": 1
}
}
Json response;
{
"id": 6,
"name": "Party A",
"description": "Description of Party A",
"category": {
"id": 1,
"labelAr": null,
"labelEn": null
}
}
------------------------------------
Party.java:
public class Party {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private String description;
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "category_id")
private PartyCategory category;
....setters and getters
}
PartyCategory.java:-
public class PartyCategory {
@Id
@GeneratedValue
private Integer id;
private String labelAr;
private String labelEn;
...setters and getters..
Repositories:
public interface PartyCategoryRepository extends JpaRepository<PartyCategory, Integer> {
}
---------------------
public interface PartyRepository extends JpaRepository<Party, Integer> {
}
Services:
public class PartyServiceImpl {
@Autowired
PartyRepository partyRepository;
public Party saveParty(Party party) {
return partyRepository.save(party);
}
Controller:
@RestController
public class PartyController {
@Autowired
PartyServiceImpl partyServiceIml;
@PostMapping(value = "/party/save")
public Party saveParty(@RequestBody Party party ) {
Party returnedParty = partyServiceIml.saveParty(party);
return returnedParty;
}
}
--------------
首先,对数据库以及其余服务使用相同的实体不是一个好习惯。它们应该是单独的实体,通常其余服务的实体称为DTO(数据访问对象)。
现在,关于您的问题,这是正常的代码中的情况,因为在保存新的Party时,您会用空值覆盖与ID 1关联的PartyCategory labelAr和labelEn,因为您没有为这些提供任何值两个标签。
return partyRepository.save(party);
如果要避免此问题,则必须首先从数据库中检索PartyCategory数据,将其设置为Party实体,然后再将其保存到数据库中。像这样的东西:
public class PartyServiceImpl {
@Autowired
PartyRepository partyRepository;
@Autowired
PartyCategoryRepository partyCategoryRepository;
public Party saveParty(Party party) {
PartyCategory partyCategory = partyCategoryRepository.findById(party.getPartyCategory().getId());
party.setPartyCategory(partyCategory);
return partyRepository.save(party);
}