#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 или для объекта).