Весенние данные neo4j и могодб перепутаны - PullRequest
0 голосов
/ 08 марта 2012

Я использую Spring-data-Neo4J и Spring-data-MongoDb вместе.Вызов метода save в UserRepository приводит к ошибке.Любая помощь будет принята с благодарностью.

Класс моего домена

@Document
@NodeEntity(partial=true)
public class User implements Serializable {

private static final long serialVersionUID = 1L;

@GraphId Long id; 
@Id
private String userId;
private String firstName;
private String lastName;

@GraphProperty
private String username;

Ниже приведен журнал ошибок:

java.lang.ClassCastException: org.springframework.data.neo4j.support.mapping.Neo4jPersistentEntityImpl не может быть приведен к org.springframework.data.mongodb.core.mapping.MongoPersistentEntity org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCistingor.Int.Int.Inf.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent (MongoPersistentEntityIndexCreator.java:47) org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster.java:97) org.springframework.context.support.AbstractApplicationContext.publishEvent (AbstractApplicationContext.java:324) org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity (AbstractMappingContext.java:263) org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity (AbstractMappingContext.java:165) org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity (AbstractMappingContext.java:140) org.springframework.data.neo4j.support.Neo4jTemplate.getPersistentEntity (Neo4jTemplate.java:573)org.springframework.data.neo4j.support.Neo4jTemplate.getMappingPolicy (Neo4jTemplate.java:470) org.springframework.data.neo4j.support.Neo4jTemplate.getMappingPolicy (Neo)Neo4jTemplate.save (Neo4jTemplate.java:295) org.springframework.data.neo4j.repository.AbstractGraphRepository.save (AbstractGraphRepository.java:106) sun.reflect.NativeMethodAccessorImpl.Impl..java: 39) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke (Method.java:597) org.springframework.data.repository.ReuserExecutorMethodInterceptor.executeMethodOn (RepositoryFactorySupport.java:323) org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.invoke (RepositoryFactorySupport.java:308) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:172) org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:110) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (рефлексивныйMethodInvocation.jPersistenceExceptionTranslationInterceptor.java:155) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:172) org.springframework.aop.framework.aop.framework.Jopd.jpgsun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke (Method.java:597) org.softAopUtils.java:318) org.springframework.aop.framework.TransactionInterceptor.invoke (TransactionInterceptor.java:110) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:172)org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:202) $ Proxy84.save (неизвестный источник)

1 Ответ

0 голосов
/ 09 марта 2012

Я думаю, это потому, что вы объединили @Document для Spring Data MongoDB и @NodeEntity для Spring Data Neo4j.Вы не можете объединить эти аннотации.

@ Document

Чтобы в полной мере использовать функциональность сопоставления объектов в поддержке Spring Data / MongoDB, вам следуетаннотируйте свои сопоставленные объекты с помощью аннотации @ org.springframework.data.mongodb.core.mapping.Document.Хотя для структуры сопоставления необязательно иметь эту аннотацию (ваши POJO будут отображаться правильно, даже без каких-либо аннотаций), она позволяет сканеру пути к классам находить и предварительно обрабатывать ваши доменные объекты для извлечения необходимых метаданных.Если вы не используете эту аннотацию, ваше приложение будет испытывать незначительное снижение производительности при первом сохранении объекта домена, потому что среда сопоставления должна создать свою внутреннюю модель метаданных, чтобы она знала о свойствах объекта вашего домена и о том, каксохранить их.См. http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/

@ NodeEntity

Аннотация @NodeEntity используется для превращения класса POJO в сущность, поддерживаемую узлом вграф базы данных.Поля на объекте по умолчанию сопоставляются со свойствами узла.Поля, ссылающиеся на другие сущности узла (или их коллекции), связаны с отношениями.См http://static.springsource.org/spring-data/data-neo4j/docs/2.0.0.RELEASE/reference/html/#d0e1621

...