繁体   English   中英

如何坚持地图 <String, List<Object> &gt;在Hibernate中

[英]How to persist a Map<String, List<Object>> in Hibernate

我有一个包含MyObject实例的Map MyObject类使用JPA来保存其字段:

@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
private Map<String, MyObject> results = new HashMap<String, MyObject>();

我们将Map 存储更改为List

private Map<String, List<MyObject>> results = new HashMap<String, List<MyObject>>();

但是在启动时我们会收到一个堆栈跟踪:

Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.me.myapp.MyObject.results[java.util.List]
    at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1150)
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:680)
    at org.hibernate.cfg.annotations.MapBinder$1.secondPass(MapBinder.java:107)
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1221)
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:383)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:673)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
    ... 30 more

Hibernate不支持持久化包含(作为值) List类型的Map吗? 或者我的注释是不正确的? 我没有在任何文档或示例中找到此特定配置。

就个人而言,我不认为这是一个很好用的Hibernate。 这里没有抽象。 如果您将具有一对多关系的模型对象表示为子List作为父级中的数据成员,那将是有意义的。

我的建议? 不要使用Hibernate。 使用直接JDBC,Spring的JDBC模板或类似iBatis的东西。

ORM代表“对象关系映射”。 你有桌子,所以你有关系部分。 您有可以分配给表中列的数据。

但听起来像你没有物体。 那么为什么要使用Hibernate呢?

存储在地图中的对象必须是oneToMany关联的目标对象(始终映射)。 您不能在那里存储任意对象或集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM