如何保存地图< String,List< Object>>在休眠 [英] How to persist a Map<String, List<Object>> in Hibernate

查看:106
本文介绍了如何保存地图< String,List< Object>>在休眠的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  @OneToMany cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
私人地图< String,MyObject> results = new HashMap< String,MyObject>();

我们更改了 转换为列表

 私人地图< ; String,List< MyObject>> results = new HashMap< String,List< MyObject>>(); 

但启动后我们会收到一个堆栈跟踪:

 产生的原因:org.hibernate.AnnotationException:@OneToMany或@ManyToMany使用靶向未映射的类:com.me.myapp.MyObject.results [java.util.List中] 
。在org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1150)
在org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:680)
。在org.hibernate.cfg.annotations.MapBinder $ 1.secondPass(MapBinder.java:107)
在org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
在org.hibernate.cfg .Configuration.secondPassCompile(Configuration.java:1221)
处org.hibernate.cfg.Configuration.buildMappings org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:383)
(Configuration.java :1206)
在org.springframework.orm.hibernate3.LocalSessionFac toryBean.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)
。在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
... 30更
Map
c>列表类型?或者我的注释不正确?我没有在任何文档或示例中找到这个特定的配置。

解决方案

我个人认为这不是很好的使用Hibernate。这里是 no 抽象。如果你有一个具有一对多关系的模型对象,这个对象表示为一个子列表作为父对象的一个​​数据成员,这将是有意义的。



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

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



但是,听起来像你没有对象。那么为什么要使用Hibernate呢?


I've got a Map containing MyObject instances. The MyObject class uses JPA to persist its fields:

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

We changed the value stored by the Map to a List:

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

But upon launching we receive a stack trace:

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

Does Hibernate not support persisting a Map containing (as values) List types? Or are my annotations incorrect? I haven't found this particular configuration in any of the documentation or examples.

解决方案

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?

这篇关于如何保存地图&lt; String,List&lt; Object&gt;&gt;在休眠的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆