jpa:将java.util.mapMap到单个表

wmvff8tz  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(423)

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

// initialization

globalConfig.put("property1", "130")
globalConfig.put("property2", "abc")
globalConfig.put("propertyXY", "0")

Map到:
全局配置:

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

使用jpa/hibernate有没有一种简洁明了的方法来实现这一点?

k10s72fa

k10s72fa1#

如果这个Map与一个表相对应(我认为这是您想要实现的),那么您需要加载所有条目并自己将其转换为Map。我不会把它放在数据层,最好能为它提供一个服务。
如果您想为一个条目在列上存储一个Map,我认为您需要一个json字段,如这里所述https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/ 或者在这里https://bootify.io/docs/persist-json-with-spring-data-hibernate.html.

dsekswqp

dsekswqp2#

你必须把它Map成一个实体。像这样:

@Entity
@Table(name="GLOBAL_CONFIG")
public class GlobalConfig {
    @Id
    private String key;
    private String value;
}

如果你想要一张Map,你就必须转换一张Map List<GlobalConfig>Map<String, String> 例如,通过大致如下所示的流操作:

interface GlobalConfigRepository extends Repository<GlobalConfig, String> {
    default Map<String, String> getMap() {
        return findAll().stream().collect(Collectors.toMap(GlobalConfig::getKey, GlobalConfig::getValue))
    }
}

相关问题