@DarkByte2015

Почему возникает ошибка при сохранении?

Есть (упрощенно) такая схема классов:

@Entity
@Table(name = "my_sub_model")
public class MySubModel {

    @Id
    @GeneratedValue
    @Column
    public Long id;

    @Version
    private Integer version;

    @Basic(optional = false)
    @Column
    public String name;
}

@Entity
@Table(name = "my_model")
public class MyModel {

    @Id
    @GeneratedValue
    @Column
    public Long id;

    @Version
    private Integer version;

    @Basic(optional = false)
    @OneToOne
    @JoinColumn(name = "sub_model_id")
    public MySubModel subModel;
}


Связь - один к одному. Но мне важно чтобы MySubModel никогда не менялась (это справочник). Я делаю в DAO:

public void addMyModel(MyModel model) {
	em.persist(model);
}


И у меня падает ошибка вида "o.h.e.jdbc.spi.SqlExceptionHelper - Значение NULL не разрешено для поля SUB_MODEL_ID". Вопрос почему так происходит? Все продебажил - у model проинициализировано поле subModel, но у этого поля указан только id - он не NULL 100%, а вот остальные поля NULL (так и должно быть). Как сделать чтобы не было этой ошибки? (только не предлагайте полностью инициализировать subModel - так не должно быть).

Пример модели которая подается в функцию (ее заполненность):

{
	"id": null,
	"subModel": {
		"id": 1,
		"name": null
	}
}


upd. Уточняю еще раз, ошибка выглядит так:

org.h2.jdbc.JdbcSQLException: Значение NULL не разрешено для поля "SUB_MODEL_ID"
NULL not allowed for column "SUB_MODEL_ID"; SQL statement:
insert into my_model (id, sub_model_id, version) values (null, ?, ?)

Помогите!!!
  • Вопрос задан
  • 1686 просмотров
Решения вопроса 1
@DarkByte2015 Автор вопроса
После того как я сделал в DAO это
model.subModel = em.getReference(MySubModel.class, model.subModel.id)

проблема наконец решилась и все добавилось!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Нужно добавить каскадирование при сохранении:
@Basic(optional = false)
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "sub_model_id")
public MySubModel subModel;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы