Не удается вставить нулевые значения в отношении @ManyToOne - PullRequest
0 голосов
/ 28 мая 2018

Я получаю эту ошибку, когда пытаюсь сохранить A class Object:

Detail: Key (classB)=() is not present in table "b".

Мне нужно иметь возможность вставить объект со значением NULL в указанный столбец.

Проблема в спящем режиме - преобразовать нулевое значение в пустую строку, поэтому при попытке сохранить объект не удается.

Если я поставлю cascade = CascadeType.ALL на @ManyToOne, работает, но он создает строку на B table с ID = 0 и пустой строкой в ​​качестве значения refColName.Я хочу избежать этого, потому что класс de A является дочерним, и каскад должен быть в классе B.

@Entity
@Table
public class A {
    ...
    @ManyToOne
    @JoinColumn(name = "class_b", referencedColumnName = "refColName", nullable = true)
    private B classB;
    ...
}

@Entity
@Table
public class B {
    ...

    @Id
    @Column (name = "id")
    private long id;

    @Column(name = "refColName")
    private String refColName;
    ...
}

Есть предложения?Спасибо за ваше время

Редактировать:

Это однонаправленное отношение, где B - таблица основных данных, поэтому у меня есть предопределенные значения.refColName должно быть строкой.Я использую referencedColumnName, потому что я не могу принять идентификатор в качестве внешнего ключа.

1 Ответ

0 голосов
/ 31 мая 2018

Мне нужно иметь возможность вставить объект со значением NULL в указанный столбец.

Пожалуйста, убедитесь, что входное значение classA для сохранения должно быть таким, как показано ниже (представляет в json)

{
  classB:null
}

, а не

{
  classB:{
    refColName:null
  }
}
...