我用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
我已经尝试了一点,但是没有任何效果,我在互联网上找不到答案
预先感谢您的回答!
答案 0 :(得分:1)
您没有提供ResponsableDBRepository
的代码,但我认为它在persist
实例上的某个地方调用了ResponsableEntity
。
如果您的问题是您没有保存从AccountEntity
引用的ResponsableEntity
,则问题可能是您没有告诉Hibernate从{{1} }至ResponsableDBRepository
。您至少需要使用AccountEntity
,但您可能需要@OneToOne(cascade = CascadeType.PERSIST)
。
答案 1 :(得分:0)
您只需要在Body
的{{1}}部分中发送对象。这是一个示例,尝试使用以下POST request
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
的更多信息