Hibernate Mapping Ausnahme Typ konnte nicht ermitteln für: java.nio.file.Path

stimmen
0

Ich habe eine Entität Foto als unten

@Entity
class Photo {

Path imagePath;

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

In dieser Einheit habe ich nio.Path, wie ich thiss Problem oder machen Sie die Tabelle in db Strings lösen können zu akzeptieren, wie Pfad der Fehler-Stack ist unten

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)
Veröffentlicht am 07/11/2018 um 23:40
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Sie könnten ein verwenden 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);
    }

}

Dieser Konverter Beispiel speichert nur den Pfad Teil der Path. Es wird keine weiteren Informationen hält, wie , was FileSystemsie gehört (und wird das Standardübernehmen , FileSystemwenn sie von Umwandlung Stringzu 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;

}

Lesen Sie die Dokumentation der folgenden für weitere Informationen:

Beantwortet am 08/11/2018 um 03:02
quelle vom benutzer

stimmen
0

Path ist keine Einheit, so dass, wenn Sie die db er gespeichert werden soll als String, werden Sie den Typ String ändern müssen und verwenden Sie die folgende Paths.get (String path), um den Pfad zurückzukehren

@Entity
class Photo {

     String imagePathStr;

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

@Transient
public Path getImagePath(){
     return Paths.get(imagePathStr);
}
Beantwortet am 08/11/2018 um 00:53
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more