Přezimují mapování výjimka Nelze zjistit typ pro: java.nio.file.Path

hlasů
0

Mám entity Photo jak je uvedeno níže

@Entity
class Photo {

Path imagePath;

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

V této společnosti musím nio.Path jak mohu vyřešit thiss problém, nebo aby se tabulka v db přijmout řetězce jako cesta k chybě zásobníku je nižší

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)
Položena 07/11/2018 v 23:40
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Dalo by se použít 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);
    }

}

Tento převaděč příklad bude ukládat pouze tu část cesty z Path. To nebude udržovat jakékoliv další informace, jako je to, co FileSystempatří k (a převezme výchozí FileSystempři konverzi z Stringk 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;

}

Naleznete v dokumentaci těchto prvků pro více informací:

Odpovězeno 08/11/2018 v 03:02
zdroj uživatelem

hlasů
0

Cesta není Entity, takže pokud chcete, aby db ukládat jako řetězec, budete muset změnit typ na řetězec a použít následující Paths.get (String cesta) vrátit cesta

@Entity
class Photo {

     String imagePathStr;

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

@Transient
public Path getImagePath(){
     return Paths.get(imagePathStr);
}
Odpovězeno 08/11/2018 v 00:53
zdroj uživatelem

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