gpt4 book ai didi

java - JPA - 没有关系的持久实体

转载 作者:行者123 更新时间:2023-12-02 12:04:45 25 4
gpt4 key购买 nike

这是一个非常基本的问题,但我无法找到文档中正确的部分来解决它。我正在编写一个简单的POC来学习Spring/JPA,以便重写应用程序。我的 POJO 之一如下所示:

@Entity
@Table(name = "Image")
public class EntityImage {

/**
* The id of the image.
*/
@Id
@NotNull
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

/**
* Path to the image.
*/
@Column(name = "path")
private Path path;

/**
* Type of the image.
*/
private ImageType type;
...

如何指定如何保​​留路径属性?如果它是一个字符串,那就很明显了,但目前,我得到了一个异常(exception)。我明白为什么,但不知道如何解决它。

org.hibernate.MappingException: Could not determine type for: java.nio.file.Path, at table: image, for columns: [org.hibernate.mapping.Column(path)]

我编写的用于持久化的小测试如下(改编自springboot快速启动示例)

public static void main(final String[] args) {
SpringApplication.run(EntityImagePersister.class);
}

@Bean
public CommandLineRunner demo(final EntityImageRepository repository) {
return (args) -> {
// save a couple of customers
final File file = new File("H:\\ZModel.png");
final Path p = file.toPath();

repository.save(new EntityImage(1L, p, ImageType.AVATAR));

存储库如下:

import org.springframework.data.repository.CrudRepository;

public interface EntityImageRepository extends CrudRepository<EntityImage, Long> {

}

最佳答案

通过 javax.persistence.Convert-Annotation 使用自定义转换器。

您的转换器可能如下所示:

class PathConverter extends javax.persistence.AttributeConverter<Path, String>{

@Override
public String convertToDatabaseColumn(Path path){
return /* your convert operation from path to string */;
}

@Override
public Path convertToEntityAttribute(String string){
return /* your convert operation from string to path */;
}
}

POJO 中的字段如下所示:

@Column(name = "path")
@javax.persistence.Convert(converter = PathConverter.class)
private Path path;

通过此设置,每次保存 POJO 时,都会调用转换器以从路径获取字符串,反之亦然,当从数据库加载字符串转换为路径时

关于java - JPA - 没有关系的持久实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46975799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com