加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 有没有更好的方法来保持地图的值是一个集合?

发布时间:2020-12-14 05:12:14 所属栏目:Java 来源:网络整理
导读:我看到很多可以使用Hibernate来保存地图,如Map String,SetEntity有点运气(特别是因为我想要一切都在一张桌子上). Mapping MultiMaps with Hibernate是一个似乎得到最多引用的东西,它详细描述了如何使用UserCollectionType实现它. 我想知道,既然是四年前写的,
我看到很多可以使用Hibernate来保存地图,如Map< String,Set&Entity>>有点运气(特别是因为我想要一切都在一张桌子上).

Mapping MultiMaps with Hibernate是一个似乎得到最多引用的东西,它详细描述了如何使用UserCollectionType实现它.

我想知道,既然是四年前写的,现在有没有更好的办法呢?

所以,例如,我想对EntityA做一个地图,Set / List< EntityB>>.

将有两个表:EntityA和EntityB(EntityB有一个外键返回EntityA).

我不想要任何中间表.

解决方法

我对当前项目的完成方式是使用xstream将bean /集合转换为xml:
public static String toXML(Object instance) {
    XStream xs = new XStream();
    StringWriter writer = new StringWriter();
    xs.marshal(instance,new CompactWriter(writer));
    return writer.toString();
}

然后在休眠中使用Lob类型来持久化:

@Lob
@Column(nullable = false)
private String data;

我发现这种方法非常通用,您可以通过它有效地实现灵活的键/值存储.你不喜欢XML格式,那么Xstream框架有内置的将对象转换为JSON的驱动程序.试一试,真的很酷

干杯

编辑:回应评论.
是的,如果你想克服经典方法的限制,你可能会牺牲像索引和/或搜索那样的东西.您可以通过自己的集合/通用实体bean实现索引/搜索/外部/子关系 – 只需维护单独的键/值表,其中需要您想要搜索的属性名称/属性值.

我已经看到了需要灵活和动态的产品的数据库设计数量(即为没有停机时间的域对象创建新属性)模式,许多数据库设计使用键/值表来存储域属性和所有者对象的引用到子级.这些产品花费数百万美元(银行/电信),所以我猜这种设计已被证明是有效的.

对不起,这不是您的原始问题的答案,因为您询问没有中间表的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读