如何持久化Map>在休眠状态下
我有一个包含 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
吗?还是我的注释不正确?我没有在任何文档或示例中找到此特定配置。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
存储在映射中的对象必须是 oneToMany 关联的目标对象(始终映射)。您不能在那里存储任意对象或集合。
The objects stored in the map must be the target object of the oneToMany association (always mapped). You can't store arbitrary objects or collections there.
就我个人而言,我认为这不是 Hibernate 的一个很好的用途。这里没有抽象。如果您有一个模型对象,该模型对象具有一对多关系,表示为子列表作为父级中的数据成员。
我的建议?不要使用休眠。使用直接的 JDBC、Spring 的 JDBC 模板或类似 iBatis 的东西。
ORM 代表“对象关系映射”。你有表,所以你有关系部分。您已获得可以分配给表中的列的数据。
但在我看来,你没有对象。那么为什么要使用Hibernate呢?
Personally, I don't think this is a good use of Hibernate. There's no abstraction here. It would make sense if you had a model object with a one-to-many relation expressed as a child List as a data member in the parent.
My advice? Don't use Hibernate. Use straight JDBC, Spring's JDBC template, or something like iBatis.
ORM stands for "Object Relational Mapping". You have tables, so you've got the relational part. You've got data that you can assign to columns in tables.
But it sounds to me like you've got no Objects. So why use Hibernate?