Почему отношения ManyToOne разрешаются только в последующем запросе в Spring JPA?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему отношения ManyToOne разрешаются только в последующем запросе в Spring JPA?

Сообщение Anonymous »

У меня есть очень простое веб-приложение. По сути, вы вызываете остальной интерфейс, и создается новая компания с двумя сотрудниками. Вы также можете получить данные о компании:

Код: Выделить всё

@org.springframework.web.bind.annotation.RestController
public class RestController {

@Autowired
private CompanyRepository companyRepository;
@Autowired
private EmployeeRepository employeeRepository;

@PostMapping("/company")
public Company createCompany() {

// Generate a new name
String name = "Company" + companyRepository.count();

Company company = new Company(name);
company=companyRepository.save(company);

Employee John= new Employee("John", company);
employeeRepository.save(John);
Employee Jane= new Employee("Jane", company);
employeeRepository.save(Jane);

company=companyRepository.findById(company.getCompanyName()).orElseThrow();

return company;
}

@GetMapping("/company/{id}")
public Company getCompany(@PathVariable("id") String id) {
return companyRepository.findById(id).orElseThrow();
}
}
Вот как определяются сущности:

Код: Выделить всё

@Entity
public class Employee {

@Id
private final String name;

@ManyToOne()
@JoinColumn()
@JsonBackReference()
private Company company;

public Employee() {
this.name = "";
}

public Employee(String name, Company company) {
this.name = name;
this.company = company;
}

public String getName() {
return name;
}
public Company getCompany() {
return company;
}

}

@Entity
public class Company {

@Id
@Column(nullable = false, columnDefinition = "text")
private final String companyName;

@OneToMany(mappedBy="company",fetch = FetchType.EAGER,cascade = CascadeType.ALL,orphanRemoval = true)
private List employees;

public Company(String companyName) {
this.companyName = companyName;
}
public Company() {
this.companyName = "";
}

public String getCompanyName() {
return companyName;
}
public List getEmployees() {
return employees;
}
}
Но в одном запросе на публикацию я получаю такой результат (сотрудники не были добавлены, хотя они были):

Код: Выделить всё

{
"companyName": "Company0",
"employees": null
}
Однако при последующем запросе это работает:

Код: Выделить всё

{
"companyName": "Company0",
"employees": [
{
"name": "John"
},
{
"name": "Jane"
}
]
}
Я нахожу такое поведение чрезвычайно странным, в конце концов, я снова перезагружаю компанию в почтовом запросе.
Так может кто-нибудь сказать мне, почему это случается?

Подробнее здесь: https://stackoverflow.com/questions/792 ... t-in-sprin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»