Исключение отображения Hibernate Не удалось определить тип для: java.nio.file.Path - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть объект Фото, как показано ниже

@Entity
class Photo {

Path imagePath;

public Path getImagePath(){
return imagePath;
// setter
}

В этой сущности я должен nio.Path, как я могу решить эту проблему или сделать таблицу в БД, чтобы принимать строки в качестве пути стек ошибок ниже

Caused by: org.hibernate.MappingException: Could not determine type for: java.nio.file.Path, at table: photo, for columns: [org.hibernate.mapping.Column(image_path)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:431)

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете использовать AttributeConverter.

import java.nio.file.Path;
import java.nio.file.Paths;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter // may want to set autoApply to true
public class PathConverter implements AttributeConverter<Path, String> {

    @Override
    public String convertToDatabaseColumn(Path attribute) {
        return attribute == null ? null : attribute.toString();
    }

    @Override
    public Path convertToEntityAttribute(String dbData) {
        return dbData == null ? null : Paths.get(dbData);
    }

}

В этом примере преобразователя будет храниться только часть пути Path. Он не будет хранить никакой другой информации, такой как FileSystem, к которой он относится (и будет принимать значение по умолчанию FileSystem при преобразовании из String в Path).

import java.nio.file.Path;
import javax.persistence.Convert;
import javax.persistence.Entity;

@Entity
public class Photo {

    @Convert(converter = PathConverter.class) // needed if autoApply isn't true
    private Path imagePath;

}

Для получения дополнительной информации см. Документацию следующего:

0 голосов
/ 08 ноября 2018

Path не является сущностью, поэтому, если вы хотите, чтобы БД сохранила его как String, вам придется изменить тип на String и использовать следующий Paths.get (String path), чтобы вернуть Path

@Entity
class Photo {

     String imagePathStr;

public String getImagePathStr(){
     return imagePath;
// setter
}

@Transient
public Path getImagePath(){
     return Paths.get(imagePathStr);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...