Я хочу сохранить каталоги в БД для моего дерева путей к файлам, но я получил эту ошибку при инициализации 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;




Вы пытаетесь сохранить путь к каталогам и подкаталогам? Какой тип данных столбца: selected_paths. Я предполагаю варчар
В этом случае вы можете отобразить путь как тип String в Java.
Я думаю (поправьте меня, если я ошибаюсь), Java не может определить соответствие между нио Path и соответствующим типом данных в БД.
При извлечении данных из БД вы можете получить их как Нить и легко использовать как Дорожка
Что ж, если вы не настроили какую-либо базу данных и нет таблицы, он не может сопоставить поле со столбцами. Аннотация @Столбец помещается в класс @Юридическое лицо, который представляет таблицу БД.
Вы можете объявить поле как 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;
БД еще нет.