Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何持久化地图<;字符串,列表<;对象>&燃气轮机;冬眠_Java_Hibernate_Jpa_Persistence_H2 - Fatal编程技术网

Java 如何持久化地图<;字符串,列表<;对象>&燃气轮机;冬眠

Java 如何持久化地图<;字符串,列表<;对象>&燃气轮机;冬眠,java,hibernate,jpa,persistence,h2,Java,Hibernate,Jpa,Persistence,H2,我有一个Map包含MyObject实例。MyObject类使用JPA保存其字段: @OneToMany(cascade = CascadeType.ALL) @LazyCollection(LazyCollectionOption.FALSE) private Map<String, MyObject> results = new HashMap<String, MyObject>(); 但启动后,我们会收到堆栈跟踪: Caused by: org.hibernate.

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

@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
private Map<String, MyObject> results = new HashMap<String, 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不支持持久化包含(作为值)
列表
类型的
映射吗?还是我的注释不正确?我在任何文档或示例中都没有发现这种特殊的配置。

我个人认为这不是Hibernate的好用法。这里没有抽象概念。如果您有一个具有一对多关系的模型对象,并将其作为父对象中的数据成员表示为子列表,那么这是有意义的

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

ORM代表“对象关系映射”。有了表,就有了关系部分。您可以将数据分配给表中的列


但我觉得你好像没有东西。那么为什么要使用Hibernate呢?

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

MyObject是JPA映射类吗?@ToddMurray:必须是,否则OP将不会收到关于
MyObject.results
字段如何注释为
@OneToMany
的错误消息。是的,MyObject的实例当前存储在Hibernate中。但是现在,不再使用String->MyObject来存储映射,而是使用String->list来存储映射。请考虑改进您的域对象。是否确实要存储列表?如果你有一个单独的类保存一个列表,然后将其存储在地图中,你的系统会改进吗?@Jochen:这正是我的观点。谢谢。我们在Hibernate中存储了许多其他关系。我们目前正在两个数据模型之间进行迁移,因此我们正在进行实验,以确定Hibernate如何构造数据库,以及我们需要在SQL/迁移脚本中包含哪些内容来适应这些更改。这些课程/关系不是最终的,但感谢您提供的提示。:)也许你可以混合搭配。您的持久性层不一定都是一种技术。使用有意义的方法。谢谢,听起来这个问题可以通过其他一些注释建议来缓解——主要是将列表封装到另一个类中,并将该类作为值存储在映射中。
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