У нас есть сущность с именем Customers
, которая имеет отношение OneToOne к сущности Address
.
PK Customer
должен быть определен вручную. Address
'PK должен быть определен автоматически.
Итак, в Customer
я опустил @GeneratedValue
, и я предоставляю значение вручную. Но при попытке сохранить я получаю следующую ошибку:
2018-11-07 10:42:17.810 ERROR 1257 --- [nio-8080-exec-2] o.h.i.ExceptionMapperStandardImpl : HHH000346: Error during managed flush [Validation failed for classes [br.com.customers.entity.Address] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='não pode ser nulo', propertyPath=street, rootBeanClass=class br.com.customers.entity.Address, messageTemplate='{javax.validation.constraints.NotNull.message}'}
Проблема в том, что предоставляется address.street
, и я не могу понять, почему JPA жалуется, что он нулевой ...
Вот тело JSON, которое я пытаюсь сохранить. (Это правильно десериализовано, так как Address не равен NULL)
{
"customer_Id": 50,
"name": "name",
"company_name": "company_name",
"email": "email@provider.com",
"business_phone": "(00) 1111-2222",
"mobile_phone": "(00) 1111-2222",
"document": "123456789",
"state_registration_number": "ISENTO",
"state_registration_type": "NO_CONTRIBUTOR",
"city_registration_number": "ISENTO",
"classification": "AUTO",
"address": {
"street": "STREET NAME",
"number": "NUMBER",
"complement": "COMPLEMENT",
"zip_code": "ZIP_CODE",
"neighborhood": "NEIGHBORHOOD",
"city": "CITY",
"state": "STATE"
}
}
Вот объект клиента:
@Data
@Entity(name = "X_CUSTOMERS")
public class Customer {
@Id
private int customer_Id;
@NotNull
private String name;
private String company_name;
private String email;
private String business_phone;
private String mobile_phone;
@NotNull
private String document;
private String state_registration_number;
private String state_registration_type;
private String city_registration_number;
@NotNull
private String classification;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinColumn(name = "address_id")
private Address address;
}
А вот, адрес объекта:
@Data
@Entity(name = "X_ADDRESS")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int address_Id;
@NotNull
private String street;
private String number;
private String complement;
private String zip_code;
private String neighborhood;
private String city;
private String state;
}
Что я делаю не так?
Спасибо !!!
При добавлении кода сохраняются сущности:
Репозиторий клиентов:
public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}
Для сохранения:
@RestController
@RequestMapping("/customers")
public class CustomersController {
private CustomerRepository customerRepository;
public CustomersController(CustomerRepository customerRepository) {
this.customerRepository = customerRepository;
}
@PostMapping
public Customer postCustomer(@RequestBody Customer customer) {
return customerRepository.save(customer);
}
}