gpt4 book ai didi

java - Spring Rest - 具有 @ManyToOne 映射的字段为 null

转载 作者:行者123 更新时间:2023-12-02 02:37:14 26 4
gpt4 key购买 nike

我有以下场景:

  1. 2 个实体,用户和公司;
  2. 我正在使用 H2database;
  3. 我保留了一个公司,一切正常,并且返回了 id 1;
  4. 当我尝试将用户保存到公司时,数据库中的字段 company_id 为空。我不知道发生了什么事!请参阅我的 json 来保留用户:

    { “id”:空, "name": "我的名字", "login": "我的登录", "邮件":"my@mail.com", "密码":" 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com