Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA:将java.util.Map映射到单个表_Java_Spring_Spring Boot_Hibernate_Jpa - Fatal编程技术网

JPA:将java.util.Map映射到单个表

JPA:将java.util.Map映射到单个表,java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,因此,基本上,我正在尝试为我的应用程序的全局、系统范围的配置实现一个简单的键值存储,为此,我想将整个java.util.map映射到数据库中的一个表?例如: //初始化 全球配置认沽期权(“财产1”、“130”) 全球配置卖出期权(“物业2”、“abc”) globalConfig.put(“propertyXY”、“0”) 映射到: 全局配置: | key | value | |------------|-------| | property1 | 130 | | pro

因此,基本上,我正在尝试为我的应用程序的全局、系统范围的配置实现一个简单的键值存储,为此,我想将整个
java.util.map
映射到数据库中的一个表?例如:

//初始化
全球配置认沽期权(“财产1”、“130”)
全球配置卖出期权(“物业2”、“abc”)
globalConfig.put(“propertyXY”、“0”)
映射到:

全局配置:

| key        | value |
|------------|-------|
| property1  | 130   |
| property2  | abc   |
| propertyXY | 0     |

使用JPA/Hibernate是否有一种干净简单的方法来实现这一点?

如果这个映射与一个表对应,我认为这是您想要实现的,那么您需要加载所有条目并自己将其转换为映射。我不会把它放在数据层,最好是为此提供服务


如果您想为一个条目在列上存储映射,我认为您需要一个JSON字段,如此处或此处所述。

您必须将其映射为一个实体。大概是这样的:

@Entity
@Table(name="GLOBAL_CONFIG")
public class GlobalConfig {
    @Id
    private String key;
    private String value;
}
interface GlobalConfigRepository extends Repository<GlobalConfig, String> {
    default Map<String, String> getMap() {
        return findAll().stream().collect(Collectors.toMap(GlobalConfig::getKey, GlobalConfig::getValue))
    }
}
如果需要映射,则必须通过流操作将
列表
转换为
映射
,流操作大致如下:

@Entity
@Table(name="GLOBAL_CONFIG")
public class GlobalConfig {
    @Id
    private String key;
    private String value;
}
interface GlobalConfigRepository extends Repository<GlobalConfig, String> {
    default Map<String, String> getMap() {
        return findAll().stream().collect(Collectors.toMap(GlobalConfig::getKey, GlobalConfig::getValue))
    }
}
interface globalconfiggrepository扩展存储库{
默认映射getMap(){
返回findAll().stream().collect(Collectors.toMap(GlobalConfig::getKey,GlobalConfig::getValue))
}
}

这能解决你的问题吗?@Shawrup-hmm。。。不,不是真的为什么不使用
@Entity@Table(name=“GLOBAL_CONFIG”)公共类ConfigEntry{@Column(name=“key”)@Id private String key;@Column(name=“value”)private String value;/*ctor、getter、setter、*/}来持久化
列表?