Java 如何仅使用一个HTTP请求(JSON文件)实例2个不同的对象

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

我用JavaSpring和Hibernate创建了一个数据库。有一个责任实体和一个账户实体,它们通过一对一关系联系在一起。 这是我的密码:

休息控制器:

@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;