Как сохранить картув спящем режиме - PullRequest
3 голосов
/ 15 февраля 2012

У меня есть Map, содержащий MyObject экземпляров. Класс 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 не поддерживает сохранение Map, содержащего (в качестве значений) List типов? Или мои аннотации неверны? Я не нашел эту конкретную конфигурацию ни в одной документации или в примерах.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Объекты, хранящиеся на карте, должны быть целевым объектом ассоциации oneToMany (всегда сопоставленной). Вы не можете хранить здесь произвольные объекты или коллекции.

1 голос
/ 15 февраля 2012

Лично я не думаю, что это хорошее применение Hibernate. Здесь нет абстракции. Это имело бы смысл, если бы у вас был модельный объект с отношением «один ко многим», выраженным в виде дочернего списка, в качестве члена данных в родительском элементе.

Мой совет? Не используйте Hibernate. Используйте прямой JDBC, шаблон Spring JDBC или что-то вроде iBatis.

ORM означает «реляционное сопоставление объектов». У вас есть таблицы, поэтому у вас есть реляционная часть. У вас есть данные, которые вы можете назначить столбцам в таблицах.

Но мне кажется, что у тебя нет Объектов. Так зачем использовать Hibernate?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...