Hi Michael,
Thanks for clarifying, is working now. I do have a few questions about my results
I thought nodes with the same name/id wouldn't be created but that node would be updated in repo? I ran my populate() method a few times to see and when I loop through all the nodes in my repository I have multiple results(identical fields)
Related to question above, I modify a property in my Resource class, like add a description that's not set in the constructor, then call template.save(res1); and it throws an IllegalStateException (I'll post code below). Note this only throws it when I add relationships through my res1 (Resource) variable.
Thanks!
// throws IllegalStateException
@Transactional
public void populate()
{
Resource res1 = template.save( new Resource("123", "Desk") );
Resource res2 = template.save( new Resource("124", "Computer") );
ResourceService rs1 = template.save( new ResourceService("5001", "Resource Service 1", "
http://example.com"));
template.save(res1.addResourceService(rs1));
template.save(res1.linkResource(res2));
res1.setDescription("Desk that holds my computer at 123 Example Avenue");
template.save(res1);
}
Exception in thread "main" java.lang.IllegalStateException: Relationship[5] has been deleted in this tx
at org.neo4j.kernel.impl.core.LockReleaser$CowEntityElement.assertNotDeleted(LockReleaser.java:128)
at org.neo4j.kernel.impl.core.LockReleaser$CowEntityElement.getPropertyAddMap(LockReleaser.java:121)
at org.neo4j.kernel.impl.core.LockReleaser$CowRelElement.getPropertyAddMap(LockReleaser.java:196)
at org.neo4j.kernel.impl.core.LockReleaser.getCowPropertyAddMap(LockReleaser.java:525)
at org.neo4j.kernel.impl.core.NodeManager.getCowPropertyAddMap(NodeManager.java:1138)
at org.neo4j.kernel.impl.core.Primitive.getProperty(Primitive.java:149)
at org.neo4j.kernel.impl.core.RelationshipProxy.getProperty(RelationshipProxy.java:90)
at org.springframework.data.neo4j.support.typerepresentation.AbstractIndexingTypeRepresentationStrategy.getJavaType(AbstractIndexingTypeRepresentationStrategy.java:89)
at org.springframework.data.neo4j.support.mapping.TRSTypeAliasAccessor.readAliasFrom(TRSTypeAliasAccessor.java:39)
at org.springframework.data.neo4j.support.mapping.TRSTypeAliasAccessor.readAliasFrom(TRSTypeAliasAccessor.java:29)
at org.springframework.data.convert.DefaultTypeMapper.readType(DefaultTypeMapper.java:72)
at org.springframework.data.convert.DefaultTypeMapper.getDefaultedTypeToBeUsed(DefaultTypeMapper.java:116)
at org.springframework.data.convert.DefaultTypeMapper.readType(DefaultTypeMapper.java:93)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityConverterImpl.read(Neo4jEntityConverterImpl.java:74)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister$CachedConverter.read(Neo4jEntityPersister.java:168)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.createEntityFromState(Neo4jEntityPersister.java:189)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:245)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:227)
at org.springframework.data.neo4j.support.Neo4jTemplate.save(Neo4jTemplate.java:295)
at org.springframework.data.neo4j.fieldaccess.OneToNRelationshipEntityFieldAccessorFactory$OneToNRelationshipEntityFieldAccessor.persistEntities(OneToNRelationshipEntityFieldAccessorFactory.java:80)
at org.springframework.data.neo4j.fieldaccess.OneToNRelationshipEntityFieldAccessorFactory$OneToNRelationshipEntityFieldAccessor.setValue(OneToNRelationshipEntityFieldAccessorFactory.java:74)
at org.springframework.data.neo4j.fieldaccess.DefaultEntityState.setValue(DefaultEntityState.java:113)
at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter.setEntityStateValue(SourceStateTransmitter.java:78)
at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter.access$100(SourceStateTransmitter.java:39)
at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter$4.doWithAssociation(SourceStateTransmitter.java:134)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:185)
at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter.copyPropertiesTo(SourceStateTransmitter.java:130)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityConverterImpl.write(Neo4jEntityConverterImpl.java:149)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister$CachedConverter.write(Neo4jEntityPersister.java:176)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:238)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:227)
at org.springframework.data.neo4j.support.Neo4jTemplate.save(Neo4jTemplate.java:295)
at jackal.mytest.example.DatabasePopulator.populate(DatabasePopulator.java:83)
at jackal.mytest.example.DatabasePopulator$$FastClassByCGLIB$$f3e9df42.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at jackal.mytest.example.DatabasePopulator$$EnhancerByCGLIB$$7911dbed.populate(<generated>)
at jackal.mytest.example.DBPopulatorApp.main(DBPopulatorApp.java:15)
// this method works
@Transactional
public void populate()
{
Resource res1 = template.save( new Resource("123", "Desk") );
Resource res2 = template.save( new Resource("124", "Computer") );
ResourceService rs1 = template.save( new ResourceService("5001", "Resource Service 1", "
http://example.com"));
template.save(rs1.addResource(res1));
template.save(res2.linkResource(res1));
res1.setDescription("Desk that holds my computer at 123 Example Avenue");
template.save(res1);