Saturday, 15 May 2010

Spring Neo4j: Error in "neo4jTemplate.save()" -



Spring Neo4j: Error in "neo4jTemplate.save()" -

i using spring-neo4j-data in java project. getting next error while saving entity:

versions:

<dependency> <groupid>org.springframework.data</groupid> <artifactid>spring-data-neo4j</artifactid> <version>3.0.0.release</version> </dependency> <dependency> <groupid>org.springframework.data</groupid> <artifactid>spring-data-neo4j-rest</artifactid> <version>3.0.0.release</version> </dependency> <dependency> <groupid>org.neo4j</groupid> <artifactid>neo4j-lucene-index</artifactid> <version>2.0.1</version> </dependency> <dependency> <groupid>org.neo4j</groupid> <artifactid>neo4j-kernel</artifactid> <version>2.0.1</version> </dependency>

code:

user entity:

@nodeentity public class user { @graphid long id; @indexed(unique=true) private string uid; private string name; private userdetails userdetails; @relatedtovia(type = "friend", direction = direction.both) private set<friendship> friendships; @relatedtovia(type = "follows", direction = direction.outgoing) private set<follows> follows; public user() { } public user(string uid) { this.uid = uid; } public friendship friendof(neo4joperations template, user friend, friendshiptype friendshiptype) { final friendship friendship = template.createrelationshipbetween(this, friend, friendship.class, "friend", false); friendship.addfriendshiptype(friendshiptype); homecoming template.save(friendship); } public follows follows(neo4joperations template, user following, followertype followertype) { final follows follows = template.createrelationshipbetween(this, following, follows.class, "follows", false); follows.addfollowertype(followertype); homecoming template.save(follows); } // getters , setters start public long getid() { homecoming id; } public string getuid() { homecoming uid; } public void setname(string name) { this.name = name; } public string getname() { homecoming name; } public void setuserdetails(userdetails userdetails) { this.userdetails = userdetails; } public userdetails getuserdetails() { homecoming userdetails; } public set<friendship> getfriendships() { homecoming friendships; } // getters , setters end @override public boolean equals(object obj) { if (this == obj) homecoming true; if (obj == null || obj.getclass() != this.getclass()) homecoming false; user user = (user) obj; homecoming this.getuid().equals(user.getuid()); } @override public int hashcode() { final int prime = 31; int result = 3; result = prime * result + this.getuid().hashcode(); homecoming result; } }

friendship pojo:

@relationshipentity(type = "friend") public class friendship { @graphid private long id; @startnode private user u1; @startnode private user u2; private set<friendshiptype> friendshiptypes; // public friends(user u1, user u2, friendshiptype... friendshiptypes) { // this.u1 = u1; // this.u2 = u2; // this.friendshiptypes = new hashset<>(); // (friendshiptype type : friendshiptypes) // this.friendshiptypes.add(type); // } public void addfriendshiptype(friendshiptype friendshiptype) { if (friendshiptypes == null) friendshiptypes = new hashset<>(); friendshiptypes.add(friendshiptype); } }

test:

public class test { private void run(neo4jtemplate template) { user john = new user("john_uid"); template.save(john); } }

exception:

exception in thread "main" java.lang.nullpointerexception @ org.springframework.data.neo4j.fieldaccess.relationshipentities.<init>(relationshipentities.java:46) @ org.springframework.data.neo4j.fieldaccess.relatedtoviacollectionfieldaccessorfactory$relatedtoviacollectionfieldaccessor.<init>(relatedtoviacollectionfieldaccessorfactory.java:74) @ org.springframework.data.neo4j.fieldaccess.relatedtoviacollectionfieldaccessorfactory.forfield(relatedtoviacollectionfieldaccessorfactory.java:56) @ org.springframework.data.neo4j.fieldaccess.fieldaccessorfactoryproviders$fieldaccessorfactoryprovider.accessor(fieldaccessorfactoryproviders.java:46) @ org.springframework.data.neo4j.fieldaccess.fieldaccessorfactoryproviders.getfieldaccessors(fieldaccessorfactoryproviders.java:74) @ org.springframework.data.neo4j.fieldaccess.defaultentitystate.<init>(defaultentitystate.java:52) @ org.springframework.data.neo4j.support.node.nodeentitystate.<init>(nodeentitystate.java:38) @ org.springframework.data.neo4j.support.node.nodeentitystatefactory.getentitystate(nodeentitystatefactory.java:48) @ org.springframework.data.neo4j.support.mapping.sourcestatetransmitter.copypropertiesto(sourcestatetransmitter.java:98) @ org.springframework.data.neo4j.support.mapping.neo4jentityconverterimpl.write(neo4jentityconverterimpl.java:167) @ org.springframework.data.neo4j.support.mapping.neo4jentitypersister$cachedconverter.write(neo4jentitypersister.java:179) @ org.springframework.data.neo4j.support.mapping.neo4jentitypersister.persist(neo4jentitypersister.java:243) @ org.springframework.data.neo4j.support.mapping.neo4jentitypersister.persist(neo4jentitypersister.java:231) @ org.springframework.data.neo4j.support.neo4jtemplate.save(neo4jtemplate.java:311) @ org.springframework.data.neo4j.support.neo4jtemplate.save(neo4jtemplate.java:305) @ org.springframework.data.neo4j.repository.abstractgraphrepository.save(abstractgraphrepository.java:111) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ org.springframework.data.repository.core.support.repositoryfactorysupport$queryexecutormethodinterceptor.executemethodon(repositoryfactorysupport.java:358) @ org.springframework.data.repository.core.support.repositoryfactorysupport$queryexecutormethodinterceptor.invoke(repositoryfactorysupport.java:343) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172) @ org.springframework.transaction.interceptor.transactioninterceptor$1.proceedwithinvocation(transactioninterceptor.java:96) @ org.springframework.transaction.interceptor.transactionaspectsupport.invokewithintransaction(transactionaspectsupport.java:260) @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:94) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172) @ org.springframework.dao.support.persistenceexceptiontranslationinterceptor.invoke(persistenceexceptiontranslationinterceptor.java:155) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172) @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:204) @ com.sun.proxy.$proxy35.save(unknown source) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:317) @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:198) @ com.sun.proxy.$proxy47.save(unknown source) @ com.music.test.run(test.java:43) @ com.music.test.main(test.java:37)

there seems code missing, complains relationship-entities.

perhaps can share project on github or exhibits issue?

some of code wrong, fixed below. can utilize repo.save() uniquely create entity.

@nodeentity public class user { @graphid long id; @indexed(unique=true) private string uid; public user(string uid) { this.uid = uid; } } public interface userrepository extends graphrepository<user> { public user getuserbyuid(string userid); @query( "merge (user:user {userid:{0}} homecoming user" ) public user createuserifnotexists(string userid); } public class test { private void run(userrepository userrepository) { user john = new user("john_uid"); userrepository.save(john); } }

regarding relationship-entity, have copy&paste typo, have @startnode twice.

@startnode private user u1; @startnode private user u2;

neo4j spring-data-neo4j

No comments:

Post a Comment