我有以下情况:
- 2 个实体,用户和公司;
- 我正在使用 H2 数据库;
- 我保留了一个公司,一切正常,并且返回了 id 1;
当我尝试将用户保存到公司时,数据库中的字段 company_id 为空。我不知道发生了什么事!请参阅我的 json 来保留用户:
{ “id”:空, "name": "我的名字", "login": "我的登录", “邮件”:“[email protected]”, "密码":" secret ", "federalID":"0000000", “公司”:{“id”:1} }
我不会发布 Controller 和其他类,只是会展示解决这个问题的重要性。在您的 map 使用的类下方。
用户类别:
@Entity(name = "users")
@Table(name = "users")
@EqualsAndHashCode
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String login;
private String mail;
private String password;
private String federalID;
@ManyToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "company_id", referencedColumnName="company_id")
private Company company;
}
公司类别:
@Entity(name="companies")
@Table(name="companies")
@EqualsAndHashCode
@Data
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String federalID;
@OneToMany(mappedBy="company", targetEntity=User.class, fetch=FetchType.EAGER)
private List<User> users;
}
其余用户实体(公司 Controller 遵循相同的模式):
@RestController
public class UsersController {
@Autowired
UserRepository userRepository;
@RequestMapping(value = "/user", method = RequestMethod.GET)
public List<User> getUsers(){
return userRepository.findAll();
}
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public User getUser(@PathVariable("id") Long id){
return userRepository.findById(id);
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ResponseEntity<User> createUser(@RequestBody User company){
return new ResponseEntity<>(userRepository.save(company), HttpStatus.CREATED);
}
@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Void> deleteUser(@PathVariable("id") Long id){
userRepository.delete(id);
return new ResponseEntity<Void>(HttpStatus.OK);
}
}
最佳答案
如您所见,Company
是您的 User
类上的关系。因此,Hibernate 无法将其识别为已初始化的实体。
要解决此问题,您应该使用company_id手动加载公司,并将加载的公司设置到UserController
内的User
类中。
关于java - Spring Rest - 具有 @ManyToOne 映射的字段为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46119395/