Как добавить нулевое значение внешнего ключа в Spring Boot?

#java #sql-server #spring-boot #hibernate #jpa

#java #sql-сервер #spring-boot #спящий режим #jpa

Вопрос:

Я хочу записать в базу данных с внешним ключом null. Я знаю, что SpringBoot не позволяет это делать. Я попробовал запись с помощью @Query insert . Но это невозможно. Я отправляю данные из клиентского формата JSON.

Город объектов.

 @Entity
@Table(name = "City")
public class City {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID_City")
Long idCity;

@Column(name="Name_City")
String nameCity;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "city")
private Collection<City> city;
/// getter and setter
 

Сущность Person

 @Entity
@Table(name = "Person")
public class Person {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID_Person")
Long idPerson;

@Column(name="Name")
String namePerson;

@Column(name="Phone")
String phonePerson;

@ManyToOne
@JoinColumn(name = "id_city")
private City city;

/// getter and setter
 

Отправка данных в SpringBoot

  {
    "namePerson": "New person",
    "phonePerson": "0999999",
    "city": {
        "idCity": "",
        "nameCity": ""
    }
}
 

Вопрос

Есть ли какой-либо способ установить значение NULL для внешнего ключа?

Ответ №1:

Вы должны city полностью удалить атрибут из вашего JSON.

Ваш JSON должен выглядеть следующим образом:

 {
    "namePerson": "New person",
    "phonePerson": "0999999"
}
 

Таким образом, вашему полю city в Person object будет присвоено значение null , следовательно, сохраненное null как внешний ключ в базе данных.

Комментарии:

1. Спасибо. Это работает. Но иногда у него есть внешний ключ данных. Как его повторно загрузить? У меня есть только один формат JSON

2. Вы можете свободно добавлять / удалять атрибут city в своем клиенте (интерфейсном интерфейсе?) По мере необходимости. spring-boot распознает такие ситуации и действует соответствующим образом (устанавливая для поля city значение null или для объекта).