Давайте начнем с этой сущности:
@Entity
public class MyEntity {
...
@Column(length = 80)
private String description;
@Column(name = "enum_column", precision = 18)
@Convert(converter = EnumColumnConverter.class)
private MyEnum enumColumn;
...
}
Здесь вы видите два столбца, которые можно обнулять (в моей сущности и в базе данных). Преобразователь заменяет перечисление значением Long
в базе данных. Класс хранилища определяется соответственно:
@Repository
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {}
DTO определяется из пакета услуг:
public class MyEntityDto {
...
private String description;
private MyEnum enumColumn;
...
}
Отображение между DTO и объектами выполняется с помощью Dozer. DTO модифицируется от Java FX UI. Служба была определена между пользовательским интерфейсом и сохранением для сохранения измененных объектов.
@Service
@Transactional
public class MyEntityService {
@Autowired MyEntityRepository myEntityRepository;
...
public List<MyEntityDto> save(List<MyEntityDto> dtosToSave) {
List<MyEntityDto> results = Collections.emptyList();
if (dtosToSave != null && !dtosToSave.empty()) {
Iterable<MyEntity> entities = convertDtosWithDozer(dtosToSave);
List<MyEntity> savedEntities = myEntityRepository.saveAll(entities);
results = convertEntitiesWithDozer(savedEntities);
}
return results;
}
Из пользовательского интерфейса я изменяю существующую строку, в которой оба значения description
и enumColumn
не являются null
. Оба значения установлены на null
.
Проблема заключается в том, что ни одно из них не установлено на null
в базе данных. В журналах запрос update
, сгенерированный Hibernate, не включает эти столбцы. Когда я отлаживаю код, эти столбцы null
в dtosToSave
, entities
, savedEntities
и results
.
Я создал модульный тест для MyEntityRepository
, где я сохраняю сущность с не ноль description
и entityColumn
. Я перезагружаю сущность из базы данных, используя репозиторий, чтобы убедиться, что эти столбцы не равны NULL. Я установил их на null
, сохранил объект и загрузил его обратно из базы данных. Теперь оба столбца действительно null
, чего я и ожидал.
Мой вопрос: чего мне здесь не хватает? Почему хранилище не сохраняет null
столбцы? Если я установлю любое ненулевое значение, оно будет работать отлично.
Заранее спасибо.
ОБНОВЛЕНИЕ: может ли моя проблема быть связана с этим? Jpa Repository save () не обновляет существующие данные