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

时间:2019-02-19 13:01:12

标签: java json spring hibernate rest

我用Java Spring和Hibernate创建了一个数据库。有一个负责任的实体和一个帐户实体,它们与OneToOne关系链接。 这是我的代码:

REST控制器:

@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 = "responsable")
public class ResponsableEntity {

    /**
     * Id of the resident
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * First name of the responsable
     */
    @Column(nullable=false)
    private String firstName;

    /**
     * Lst name of the responsable
     */
    @Column(nullable=false)
    private String lastName;

    /**
     * Account id of the responsable
     */
    //@Column(nullable=false)
    @OneToOne
    @JoinColumn(name = "account", referencedColumnName = "id")
    private AccountEntity account;

帐户实体:

@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以创建一个负责任的帐户,并将两者链接到数据库中

这是我为学校准备的一个项目,这是我第一次使用Spring和Hibernate,所以我无法说出是否可行以及如何编写JSON

我已经尝试了一点,但是没有任何效果,我在互联网上找不到答案

预先感谢您的回答!

2 个答案:

答案 0 :(得分:1)

您没有提供ResponsableDBRepository的代码,但我认为它在persist实例上的某个地方调用了ResponsableEntity

如果您的问题是您没有保存从AccountEntity引用的ResponsableEntity,则问题可能是您没有告诉Hibernate从{{1} }至ResponsableDBRepository。您至少需要使用AccountEntity,但您可能需要@OneToOne(cascade = CascadeType.PERSIST)

答案 1 :(得分:0)

您只需要在Body的{​​{1}}部分中发送对象。这是一个示例,尝试使用以下POST request

向您的网址发出POST请求(使用Postman或任何类似工具)
Body (raw/JSON (application/json) )

如果您希望与父实体({ "firstName": "your_first_name", "lastName": "your_last_name", "account": { "username": "account_username", "password": "account_password" } } )一起保留子实体(ResponsableEntity),则您的模型必须像这样

Account

请记住,正如威利斯·布莱克本(Willis Blackburn)正确地说的那样,您可能只需要使用cascade = CascadeType.PERSIST而不是全部(//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; 包括ALL类型)。

您可以找到有关级联类型here

的更多信息