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、*/}来持久化列表?