Как решить исключение сопоставления Hibernate для Set <Path> в Java?

Я хочу сохранить каталоги в БД для моего дерева путей к файлам, но я получил эту ошибку при инициализации Hibernate:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [hibernate-config.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: java.nio.file.Path, at table: BasePlan_selectedPaths, for columns: [org.hibernate.mapping.Column(selected_paths)]

Здесь - это мой filePathTree:

@Column(name = "selected_paths")
@ElementCollection(targetClass = Path.class)
private Set<Path> selectedPaths;
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
560
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы пытаетесь сохранить путь к каталогам и подкаталогам? Какой тип данных столбца: selected_paths. Я предполагаю варчар

В этом случае вы можете отобразить путь как тип String в Java.

Я думаю (поправьте меня, если я ошибаюсь), Java не может определить соответствие между нио Path и соответствующим типом данных в БД.

При извлечении данных из БД вы можете получить их как Нить и легко использовать как Дорожка

БД еще нет.

stephan 11.03.2018 19:27

Что ж, если вы не настроили какую-либо базу данных и нет таблицы, он не может сопоставить поле со столбцами. Аннотация @Столбец помещается в класс @Юридическое лицо, который представляет таблицу БД.

Adi V 11.03.2018 19:59

Вы можете объявить поле как String и использовать Path в получателе.

@Column(name = "selected_paths")
@ElementCollection(targetClass = Path.class)
private Set<String> selectedPaths;

public Set<Path> getSelectedPaths() {
    return selectedPaths.stream().map(Paths::get).collect(Collectors.toSet());
}
Ответ принят как подходящий

Я создал класс конвертера. После этого я изменил свои поля. Hibernate создает таблицу, в которой пути сохраняются в виде строки.

public class PathConverter implements AttributeConverter<Path, String> {

    @Override
    public String convertToDatabaseColumn(Path path) {
        return path.toString();
    }

    @Override
    public Path convertToEntityAttribute(String path) {
        return Paths.get(path);
    }
}

@Column(name = "selected_paths")
@ElementCollection(targetClass = Path.class)
@Convert(converter = PathConverter.class)
private Set<Path> selectedPaths;

@Column(name = "unselected_paths")
@ElementCollection(targetClass = Path.class)
@Convert(converter = PathConverter.class)
private Set<Path> unSelectedPaths;

Другие вопросы по теме