Java 如何仅使用一个HTTP请求(JSON文件)实例2个不同的对象
我用JavaSpring和Hibernate创建了一个数据库。有一个责任实体和一个账户实体,它们通过一对一关系联系在一起。 这是我的密码: 休息控制器:Java 如何仅使用一个HTTP请求(JSON文件)实例2个不同的对象,java,json,spring,hibernate,rest,Java,Json,Spring,Hibernate,Rest,我用JavaSpring和Hibernate创建了一个数据库。有一个责任实体和一个账户实体,它们通过一对一关系联系在一起。 这是我的密码: 休息控制器: @RestController @RequestMapping("/test") public class test { @Autowired private final ResponsableDBRepository responsableDBRepository; public test(ResponsableD
@RestController
@RequestMapping("/test")
public class test {
@Autowired
private final ResponsableDBRepository responsableDBRepository;
public test(ResponsableDBRepository responsableDBRepository){
this.responsableDBRepository = responsableDBRepository;
}
@RequestMapping(method = RequestMethod.POST)
ResponseEntity<?> insert(@RequestBody ResponsableEntity responsableEntity) {
responsableDBRepository.save(responsableEntity);
return ResponseEntity.accepted().build();
}
}
账户主体:
@Entity
@Table(name = "account")
public class AccountEntity {
/**
* Id of the acount
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
/**
* Username of the acount
*/
@Column(nullable=false)
private String username;
/**
* Password of the account
*/
@Column(nullable=false)
private String password;
我想做的是向我的控制器(/test)发送一个POST HTTP请求,并发送一个JSON来创建一个帐户和responsible,并将两者链接到数据库中
这是我为学校做的一个项目,这是我第一次使用Spring和Hibernate,所以我不能说这是否可能,如果可能的话如何编写JSON
我已经尝试了一点,但没有任何效果,我没有找到我的答案在互联网上
提前感谢您的回答 您只需在
POST请求的正文部分发送对象即可。下面是一个示例,尝试使用以下正文(raw/JSON(application/JSON))
如果您希望与父实体(ResponsableEntity
)一起持久化子实体(Account
),则您的模型必须如下所示
//ResponsableEntity class
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private Account account;
//Account class
@OneToOne(mappedBy = "account", cascade = CascadeType.ALL,
fetch = FetchType.LAZY, optional = false)
private ResponsableEntity responsableEntity;
请记住,正如Willis Blackburn所说,您可能只需要使用cascade=CascadeType.PERSIST而不是all(all
包括PERSIST
类型)
您可以找到有关级联类型的更多信息您没有提供ResponsableDBRepository
的代码,但我假设它在ResponsableEntity
实例上调用了persist
如果您的问题是从ResponsableEntity
引用的AccountEntity
没有被保存,那么您的问题可能是您没有告诉Hibernate将持久化操作从ResponsableDBRepository
级联到AccountEntity
。您至少需要使用@OneToOne(cascade=CascadeType.PERSIST)
,但您可能需要CascadeType。所有的您可以创建一个包装器对象来包装这两个对象,并将该对象作为JSON正文发送。是的,最好的方法是创建一个包装器DTO(数据传输对象),然后从那里开始工作。他为什么需要一个包装器对象?一个对象已包含另一个对象。
{
"firstName": "your_first_name",
"lastName": "your_last_name",
"account":
{
"username": "account_username",
"password": "account_password"
}
}
//ResponsableEntity class
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private Account account;
//Account class
@OneToOne(mappedBy = "account", cascade = CascadeType.ALL,
fetch = FetchType.LAZY, optional = false)
private ResponsableEntity responsableEntity;