Coder Social home page Coder Social logo

gorm-neo4j's Introduction

gorm-neo4j's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gorm-neo4j's Issues

DataIntegrityViolationException while trying to get an association's property which is null

Having this structure:

class Player extends AbstractGraphDomain {

    String name
    Application application

    static mapping = {
        dynamicAssociations true
    }

    String getParentAppName() {
        if (application?.parent) {
            return application.parent.name
        }
        
        return null
    }
}

class Application extends AbstractGraphDomain {

    String name
    String appVersion
    Application parent

    static constraints = {
        appVersion nullable: true
        type nullable: true, bindable: true
        parent nullable: true
    }

}

When trying to check if a player's application has parent (which is another application) and this parent is null,

        Player player = Player.findByName("player1")
        String app = player.getParentAppName()

it's throwing this exception:

java.lang.reflect.InvocationTargetException: null
        at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)
        at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
        at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.dao.DataIntegrityViolationException: Proxy for [core.Application] for association [core.Application] could not be initialized
        at org.grails.datastore.mapping.proxy.AssociationQueryProxyHandler.resolveDelegate(AssociationQueryProxyHandler.java:83)
        at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.resolveDelegateAndGetProperty(GroovyObjectMethodHandler.java:59)
        at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.getProperty(GroovyObjectMethodHandler.java:52)
        at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.handleInvocation(GroovyObjectMethodHandler.java:167)
        at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.handleInvocation(EntityProxyMethodHandler.java:76)
        at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.invoke(GroovyObjectMethodHandler.java:141)
        at core.Player.getParentAppName(Player.groovy:20)
        at core.PlayerController.$tt__updatePlayer3(PlayerController.groovy:49)
        at grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93)
        ... 14 common frames omitted

You can reproduce this by downloading: https://github.com/mburak/sampleapp and checking out branch 'dup-assoc'

  1. Start up the application on an empty db.
  2. Call rest api url: http://localhost:8080/player/updatePlayer3

Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.SessionManager while running unit test

I am getting the next error:

org.grails.datastore.mapping.model.DatastoreConfigurationException: Unable to start embedded Neo4j server: org/eclipse/jetty/server/SessionManager
	at org.grails.datastore.gorm.neo4j.connections.Neo4jConnectionSourceFactory.create(Neo4jConnectionSourceFactory.java:81)
	at org.grails.datastore.gorm.neo4j.connections.Neo4jConnectionSourceFactory.create(Neo4jConnectionSourceFactory.java:30)
	at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64)
	at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52)
	at org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24)
	at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:250)
	at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:272)
	at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:282)
	at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:320)
	at neo4j.movies.MovieServiceSpec.$spock_initializeSharedFields(MovieServiceSpec.groovy:12)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager
	at org.neo4j.server.CommunityNeoServer.createWebServer(CommunityNeoServer.java:89)
	at org.neo4j.server.AbstractNeoServer.init(AbstractNeoServer.java:181)
	at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:196)
	at org.neo4j.harness.internal.InProcessServerControls.start(InProcessServerControls.java:72)
	at org.neo4j.harness.internal.AbstractInProcessServerBuilder.newServer(AbstractInProcessServerBuilder.java:137)
	at org.grails.datastore.gorm.neo4j.util.EmbeddedNeo4jServer.start(EmbeddedNeo4jServer.java:175)
	at org.grails.datastore.gorm.neo4j.util.EmbeddedNeo4jServer.start(EmbeddedNeo4jServer.java:88)
	at org.grails.datastore.gorm.neo4j.util.EmbeddedNeo4jServer.attemptStartServer(EmbeddedNeo4jServer.java:185)
	at org.grails.datastore.gorm.neo4j.util.EmbeddedNeo4jServer.start(EmbeddedNeo4jServer.java:53)
	at org.grails.datastore.gorm.neo4j.connections.Neo4jConnectionSourceFactory.create(Neo4jConnectionSourceFactory.java:75)
	... 9 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.SessionManager
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 19 more

while running the next Unit test in a Grails 3.3.0 app:

package neo4j.movies

import grails.gorm.transactions.Rollback
import org.grails.datastore.gorm.neo4j.Neo4jDatastore
import spock.lang.AutoCleanup
import spock.lang.Shared
import spock.lang.Specification

@SuppressWarnings(['MethodName', 'DuplicateNumberLiteral', 'UnnecessaryGetter', 'TrailingWhitespace'])
class MovieServiceSpec extends Specification {

    @Shared @AutoCleanup Neo4jDatastore datastore = new Neo4jDatastore(getClass().getPackage())
    
    MovieService service =  datastore.getService(MovieService)
    
    @Rollback
    void 'Test search movies'() {
        given:
        new Movie(title: 'The Matrix', tagline: 'Free your mind', released: 1999).save(flush:true)

        expect: 'to find results'
        service.search('Matr')
        service.search('The')
        !service.search('The Wrestler')
    }
}

I have the next rest runtime dependency

testRuntime "org.neo4j.test:neo4j-harness:3.1.2"

Other persons have reported similar failures while running integration tests with Spring Boot 1.5 and Neo4j

Example repository

The complete folder in the next repository contains a Grails 3 application with an @Ignored test which demonstrates this issue.

https://github.com/grails-guides/neo4j-movies

Cannot persist dynamic association when using snowflake generator

I'm getting the following exception:

org.neo4j.driver.v1.exceptions.ClientException: Unable to convert org.sampleapp.core.Club to Neo4j Value.
        at org.neo4j.driver.v1.Values.value(Values.java:96)
        at org.neo4j.driver.v1.Values.value(Values.java:182)
        at org.neo4j.driver.v1.Values.value(Values.java:82)
        at org.neo4j.driver.v1.Values.value(Values.java:232)
        at org.neo4j.driver.v1.Values.value(Values.java:83)
        at org.neo4j.driver.v1.Values.value(Values.java:232)
        at org.neo4j.driver.internal.ExplicitTransaction.run(ExplicitTransaction.java:170)
        at org.grails.datastore.gorm.neo4j.Neo4jSession.processInsertsForEntity(Neo4jSession.java:567)
        at org.grails.datastore.gorm.neo4j.Neo4jSession.flushPendingInserts(Neo4jSession.java:406)
        at org.grails.datastore.mapping.core.AbstractSession.flush(AbstractSession.java:337)
        at org.grails.datastore.gorm.neo4j.Neo4jSession.flush(Neo4jSession.java:826)
        at org.grails.datastore.mapping.query.Query.flushBeforeQuery(Query.java:699)
        at org.grails.datastore.mapping.query.Query.doList(Query.java:582)
        at org.grails.datastore.mapping.query.Query.singleResult(Query.java:577)
        at org.grails.datastore.gorm.finders.AbstractFindByFinder.invokeQuery(AbstractFindByFinder.java:35)
        at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:29)
        at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:319)
        at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:42)
        at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:27)
        at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:252)
        at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:390)
        at org.grails.datastore.gorm.finders.FinderMethod$invoke$0.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
        at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:172)
        at org.grails.datastore.gorm.GormEntity$Trait$Helper.staticMethodMissing(GormEntity.groovy:749)
        at org.grails.datastore.gorm.GormEntity$Trait$Helper$staticMethodMissing$3.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
        at org.sampleapp.core.Player.staticMethodMissing(Player.groovy)
        at org.sampleapp.core.Player$staticMethodMissing.callStatic(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214)
        at org.sampleapp.core.Player.$static_methodMissing(Player.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1504)
        at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1492)
        at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:53)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
        at org.sampleapp.core.InitializeService.$tt__initialize(InitializeService.groovy:34)
        at org.sampleapp.core.InitializeService$_initialize_closure1.doCall(InitializeService.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at groovy.lang.Closure.call(Closure.java:414)
        at org.sampleapp.core.InitializeService$_initialize_closure1.call(InitializeService.groovy)
        at groovy.lang.Closure.call(Closure.java:430)
        at org.sampleapp.core.InitializeService$_initialize_closure1.call(InitializeService.groovy)
        at grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93)
        at org.sampleapp.core.InitializeService.initialize(InitializeService.groovy)
        at org.sampleapp.core.InitializeService$initialize.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
        at sampleapp.BootStrap.initialize(BootStrap.groovy:14)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:158)
        at sampleapp.BootStrap$_closure1.doCall(BootStrap.groovy:8)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1092)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at groovy.lang.Closure.call(Closure.java:414)
        at groovy.lang.Closure.call(Closure.java:408)
        at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:535)
        at grails.util.Environment.executeForEnvironment(Environment.java:528)
        at grails.util.Environment.executeForCurrentEnvironment(Environment.java:504)
        at org.grails.web.servlet.boostrap.DefaultGrailsBootstrapClass.callInit(DefaultGrailsBootstrapClass.java:62)
        at org.grails.web.servlet.context.GrailsConfigUtils.executeGrailsBootstraps(GrailsConfigUtils.java:65)
        at org.grails.plugins.web.servlet.context.BootStrapClassRunner.onStartup(BootStrapClassRunner.groovy:53)
        at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy:256)
        at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:383)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:337)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:882)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:388)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:375)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at sampleapp.Application.main(Application.groovy:8)

This is the code:

            Club club = new Club(name: "club1")
            club.save()

            Player player = new Player(name: "player1", __appName__: "app1")
            player.application = application
            player.club = club
            player.save()

where club is a dynamic property.

You can see this behavior by downloading https://github.com/mburak/sampleapp and starting app the application on an empty database.

No associations persisted using grails' neo4j plugin version 6.1.4

I created a very basic application using grails 3.3.0 and neo4j plugin 6.1.4
I have the following domains:

class Person {

    static mapWith = "neo4j"

    String name
    Activity principalActivity

    static hasMany = [phones: Phone]
    
    static constraints = {
        name nullable: false, blank: false
        principalActivity nullable: true
    }

    static mapping = {
        dynamicAssociations true
        phones cascade: "all-delete-orphan"
    }
}

class Phone {

    static mapWith = "neo4j"
    
    String number

    static belongsTo = [person:Person]

    static constraints = {
        number nullable: false, blank: false
    }
}
class Activity {

    static mapWith = "neo4j"

    String description

    static constraints = {
        description nullable: false
    }
}

In BootStrap.groovy I'm creating initial data

class BootStrap {

    def init = { servletContext ->

        Phone phone3 = new Phone(number: '4451-1227')
        Phone phone4 = new Phone(number: '4452-1227')
        Phone phone5 = new Phone(number: '4453-1227')

        Person p1 = new Person(name: 'Person 1', principalActivity: new Activity(description: 'Jobless'))
        p1.addToPhones(number: '3333-2122')
        p1.save(failOnError: true)

        Person p2 = new Person(name: 'Person 2')
        p2.addToPhones(phone3)
        p2.addToPhones(phone4)

        Person p3 = new Person(name: 'Person 3')

        Person p4 = new Person(name: 'Person 4')
        
        //Creates a dynamic association one to one
        p4.mainPhone = phone5

        p2.save()
        p3.save()
        p4.save()
    }

In neo4j I got all Persons, Phones and the activity persisted correctly but without any relationship between them.

neo4j> MATCH (n:Person) RETURN n;
(:Person {name: "Person 1", version: 0})
(:Person {name: "Person 2", version: 0})
(:Person {name: "Person 3", version: 0})
(:Person {name: "Person 4", version: 0})

neo4j> MATCH (n:Activity) RETURN n;
(:Activity {description: "Jobless", version: 0})

neo4j> MATCH (n:Phone) RETURN n;
(:Phone {number: "3333-2122", version: 0})
(:Phone {number: "4451-1227", version: 0})
(:Phone {number: "4452-1227", version: 0})
(:Phone {number: "4453-1227", version: 0})

If you try to get all relationships of Person I will not get any

neo4j> MATCH (n:Person)-[r]-() RETURN r;
neo4j>

You can reproduce this running the application in https://github.com/mvinas1977/sampleApp

Complex query seems doesn`t build properly

The query
https://gyazo.com/2ca3f7c263107a864728188138391476
Its builded to:
QUERY Cypher [MATCH (n:AclEntry), (n)-[:ACLOBJECTIDENTITY]->(m_1), (n)-[:SID]->(m_0) WHERE ( ( m_0.sid=~{1} ) AND ( m_1.objectId={2} ) AND ) OPTIONAL MATCH(n)-[:SID]->(sidNode) OPTIONAL MATCH(n)-[:ACLOBJECTIDENTITY]->(aclObjectIdentityNode) RETURN n as data , collect(DISTINCT aclObjectIdentityNode) as aclObjectIdentityNodes, collect(DISTINCT sidNode) as sidNodes ] for params [[1:^\QadminUser5\E$, 2:rootClass5]]
and this too:
https://gyazo.com/18e3ab1341fa785e9b19e6b1c02f0a11
QUERY Cypher [MATCH (n:AclEntry), (n)-[:ACLOBJECTIDENTITY]->(m_0), (n)-[:SID]->(m_1), (m_1)-[:SID]->(m_2) WHERE ( ( AND ( m_2.__id__={1} ) ) ) OPTIONAL MATCH(n)-[:SID]->(sidNode) OPTIONAL MATCH(n)-[:ACLOBJECTIDENTITY]->(aclObjectIdentityNode) RETURN n as data , collect(DISTINCT aclObjectIdentityNode) as aclObjectIdentityNodes, collect(DISTINCT sidNode) as sidNodes ] for params [[1:%admin%]]

Error when CountBy a relationship

If i countBy a relationship, i get this error:

class Membership implements Relationship<User, Team> {
    static mapWith = "neo4j"
}

def total=Membership.countByTo(Team.get(id))

error:
Type mismatch: r already defined with conflicting type Relationship (expected Node) (line 1, column 33 (offset: 32))
"MATCH (n:User)-[r]->(to:Team), (r)-[:TO]->(m_0) WHERE ( ID(m_0)={1} ) RETURN count(*) "
ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ^. Stacktrace follows:
java.lang.reflect.InvocationTargetException: null

Using snowflake as id generator is failing to create objects in the database

Upgraded to 6.1 and it's throwing an IdentityGenerationException wit this message: "
CREATE operation did not generate an identifier for entity ..."

I have the id generator configured globally in application.groovy this way:

grails.neo4j.default.mapping = {
    id generator: 'snowflake'
}

I think the issues has to do with this code in GraphPersistentEntity. It's trying to get that IdGenerator from mappingContext, but it's never set on that object. In previous versions this was set as SnowflakeIdGenerator by default, but that was removed in the last version.

                case IdGenerator.Type.SNOWFLAKE:
                    return ((Neo4jMappingContext)mappingContext).getIdGenerator()

When deleting an object GORM is cascade deleting wrong related objects

Let's say we have the following classes:

Club { String name hasMany = [players: Player] }

Player { String name belongsTo = [club: Club] }

BoardMember { String name Club club }

when deleting a Club, it's deleting all the related BoardMember object's to that Club.
It seems that as the Player belongsTo relationship has the same name as the BoardMember , it's deleting both.

Customizing labels doesn't work in conjunction with dynamic associations

If we change a class label to use a static one, let say we have Club, but we set the static label to be __Club__, then if we use that class in a dynamic association, GORM is using the class name to create the sourceType property for that relationship but then it tries to load the relationship using the label so it fails.

Proxy not loading correctly when using executeCypher or find

Trying to load an object this way:

Player player = Player.find("MATCH (n:Player) WHERE n.name = {name} RETURN n", params)

or this way

Player player = Player.executeCypher("MATCH (n:Player) WHERE n.name = {name} RETURN n", params) as Player

when trying to access a related object's id it's returning a wrong one. In this case player.application.id is the same as player.id. This doesn't happen when you load the object with GORM finders or get.
You can reproduce this by downloading the project at https://github.com/mburak/sampleapp, branch 'wrong-proxy'.
1 - Start up the application on an empty db.
2 - Call rest api 'http://localhost:8080/player/checkIds

Old relationships are not deleted

Having this classes:

class Player  {

    String name
    Application application

    static mapping = {
        dynamicAssociations true
    }

}


class Application {

    String name
    String appVersion

    static constraints = {
        appVersion nullable: true
    }
}

I create a player1 with an Application app1. Then in a controller actuib I update the player's application to be app2 but in the database I see both relationships:

neo4j-sh (?)$ ls -a 48
:Player
*dateCreated =[1492546127413]
*lastUpdated =[1492546127413]
*name        =[player1]
*version     =[0]
(player1,48)-[:club]->(club2,47)
(player1,48)-[:APPLICATION]->(app2,45)
(player1,48)-[:APPLICATION]->(app1,44)

You can reproduce this by downloading the project at https://github.com/mburak/sampleapp, branch 'dup-assoc'.
1 - Start up the app
2 - Access rest controller action club/updatePlayer

NPE when using custom id generator

After upgrading to 6.1, we are getting a NullPointeException in this line in Neo4jDatastore:

                if(graphPersistentEntity.getIdGenerator() != null && graphPersistentEntity.getIdGeneratorType().equals(IdGenerator.Type.SNOWFLAKE)) {

The problem is that when the idGenerator is custom, the idGeneratorType is not set so graphPersistentEntity.getIdGeneratorType is null.

Wrong Id on related object

I have a very simple model

`class Club extends BaseGraphDomain {

String name

static constraints = {
    name nullable: false, blank: false, unique: true
}

}`

`class Player extends BaseGraphDomain {

String name
Integer number

static belongsTo = [club: Club]

static constraints = {
    name nullable: false, blank: false, unique: true
    number nullable: false, validator: { it > 0 }
}

}`

each Players belongs to a club

the problem is when you try to use a related object

`Player player = Player.get(someId)

print player.club`

the related object, in this case club, has all its properties with right values, except id that is same one than the player one

you can reproduce it using this sampleApplication

https://github.com/mvinas1977/neo4jSampleApp

if you do
http://localhost:8080/players/show/4

it show a player, you can see that player-club's id is 4 same than player's id

{"id":4,"dateCreated":"2017-11-28T19:17:35Z","lastUpdated":"2017-11-28T19:17:35Z","name":"Blass Armando Giunta","number":8,"club":{"id":4}}

If you list clubs you will see that there is only one and its id is 0

http://localhost:8080/clubs

[{"id":0,"dateCreated":"2017-11-28T19:17:35Z","lastUpdated":"2017-11-28T19:17:35Z","name":"Boca Jrs"}]

Set a dynamic collection association after clearing fails.

The following test fails in 6.0.x branch.

def "test clear and set again dynamic collection association"() {
    setup:
    def cosima = new Pet(name: 'Cosima')
    def lara = new Pet(name: 'Lara')
    def fred = new Pet(name: 'Fred')
    cosima.buddies = [lara, fred]

    when:
    cosima.save()
    session.flush()
    session.clear()
    def pet = Pet.findByName("Cosima")
    pet.buddies.clear()
    pet.save(flush:true)
    session.clear()
    pet = Pet.findByName("Cosima")
    lara = Pet.findByName('Lara')
    pet.buddies = [lara]
    pet.save(flush:true)
    session.clear()
    pet = Pet.findByName("Cosima")
    def result = session.transaction.nativeTransaction.execute("MATCH (n:Pet {__id__:{1}})-[:buddies]->(l) return l", [cosima.id])

    then:"The relationship is empty"
    IteratorUtil.count(result) == 1
    pet.buddies instanceof Collection
    pet.buddies.size() == 1
    pet.buddies.first().name == 'Lara'

}

afterCommit event is not triggered after commit

As Neo4j plugin really is committing the transactions on close (and not on commit), this event is not working correctly because is triggered before the Neo4j transactions are committed leading to an unpredicted behavior.

Release 6.0.13.RELEASE

Current SNAPSHOT is stable for a while and can be released if no further work has been planned.

Cannot add objects on eagerly fetched associations

Having an association like this:

class Player extends AbstractGraphDomain {

    String name
    List<Club> formerClubs = []

    static hasMany = [formerClubs: Club]

    static mapping = {
        formerClubs lazy: false, fetch: "eager"
    }

}

when we try to add a new object to the association we get this:

java.lang.reflect.InvocationTargetException: null
        at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)
        at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
        at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.UnsupportedOperationException: null
        at java.util.AbstractList.add(AbstractList.java:148)
        at java.util.AbstractList.add(AbstractList.java:108)
        at org.grails.datastore.mapping.dirty.checking.DirtyCheckingCollection.add(DirtyCheckingCollection.groovy:52)
        at org.grails.datastore.gorm.neo4j.collection.Neo4jList.add(Neo4jList.groovy:59)
        at org.sampleapp.core.PlayerController.$tt__updatePlayer4(PlayerController.groovy:68)
        at grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93)
        ... 14 common frames omitted

You can reproduce this by downloading the project at https://github.com/mburak/sampleapp and checking out branch called 'assoc-error'.
#1. Start the project on an empty db
#2. Do an ajax call to http://localhost:8080/player/updatePlayer4

Having a constraint for an property called "attributes" fails

We have one object that has an attribute property and we have a constraint for it, no matter what the constraint is (just nullable:true would do it). We we start up the application we get this exception:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.datastore.gorm.neo4j.Neo4jDatastore]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: object is not an instance of declaring class at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:267) ... 60 more Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1210) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1123) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1127) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1123) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) at com.brinqa.platform.core.model.DataModel$__clinit__closure16.doCall(DataModel.groovy:66) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1210) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1123) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) at groovy.lang.Closure.call(Closure.java:426) at com.brinqa.platform.core.model.DataModel$__clinit__closure16.call(DataModel.groovy) at groovy.lang.Closure.call(Closure.java:442) at com.brinqa.platform.core.model.DataModel$__clinit__closure16.call(DataModel.groovy) at org.grails.datastore.mapping.config.groovy.DefaultMappingConfigurationBuilder.evaluate(DefaultMappingConfigurationBuilder.groovy:88) at org.grails.datastore.mapping.config.groovy.DefaultMappingConfigurationBuilder.evaluate(DefaultMappingConfigurationBuilder.groovy) at org.grails.datastore.mapping.config.AbstractGormMappingFactory.evaluateWithContext(AbstractGormMappingFactory.java:99) at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:84) at org.grails.datastore.gorm.neo4j.GraphPersistentEntity.<init>(GraphPersistentEntity.groovy:47) at org.grails.datastore.gorm.neo4j.Neo4jMappingContext.createPersistentEntity(Neo4jMappingContext.java:116) at org.grails.datastore.gorm.neo4j.Neo4jMappingContext.createPersistentEntity(Neo4jMappingContext.java:111) at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:199) at org.grails.datastore.gorm.neo4j.Neo4jMappingContext.<init>(Neo4jMappingContext.java:92) at org.grails.datastore.gorm.neo4j.Neo4jDatastore.createMappingContext(Neo4jDatastore.java:282) at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:216) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:1075)

Here you can download a sample project where you can reproduce it just by starting it: https://github.com/mburak/neo4j-app

6.1.4 release not available

Updated to latest GORM release and getting this:

> Could not find org.grails.plugins:neo4j:6.1.4.RELEASE.
  Required by:
      project :platform

Can you release neo4j 6.1.4 to be in sync with grails-data-mapping release?

Thanks.

Creating objects on PreInsert/PostInsert is not creating them in the db

We have some listeners that listen to persistent events and try to create different objects on those events. It looks that these objects are not created at all using GORM standard functions.
This seems to be a pretty basic use case, is there anything wrong in what we are doing?

You can see a sample project in https://github.com/mburak/neo4j-app. There we have a listener "OtherListener" that listens to PostInsert and tries to create a simple object. If you start the project on a empty database you will see that it should be creating some of these objects but looking at the database, they are not there.

Setting an empty value on a dynamic collection doesn't update the relationship

Let's say we have a Club class and a Player class and we create a dynamic relationship between them called players. We add a new player to that collection and GORM creates the right relationship. But after that you set that collection to empty [], then GORM creates a new empty simple property with the same name as the relationship and leaves that relationship untouched.
If you tried to set the dynamic property again, it wouldn't work anymore.

environmental settings aren't honored in application.yml

Presently, only global grails.neo4j.* settings are honored for configuration. For proper use of neo4j (bolt driver edition), we would need per environment settings, such as environments.development.neo4j.*, test, and production variants.

Please see [https://github.com/jmlittle/envNeo] for sample project. The project implies that you have a neo4j 3.x service running at the default port, and in the sample project, the username/password of neo4j is used.

The error one receives when using an environmental settings block is the same as when one doesn't assign any neo4j settings within application.yml

ERROR org.springframework.boot.SpringApplication - Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'neo4jTransactionManager' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.datastore.gorm.neo4j.Neo4jDatastore]: Constructor threw exception; nested exception is org.neo4j.driver.v1.exceptions.ClientException: Authentication token must contain: 'scheme : basic' (ID:8D751B007CC145D2FD07055706D6D6C86EAE412C09B0009A31783E820FA92CB7)

Problem translating finder queries to cypher in relationships with same from and to

If we have two relationShips with same from and to, finder queries are not correct because relationship's type is not present in the translated cypher query.

For example, consider this example from the documentation:

class CastMember implements Relationship<Person, Movie> {
    List<String> roles = []
}
CastMember cm = CastMember.findByRoles(['Neo'])

This query translates to:

MATCH (n:Celeb)-[r]->(to:Movie) WHERE ( r.roles={1} ) RETURN r as rel, n as from, to as to
 ] for params [[1:[Neo]]

it should translates to:

MATCH (n:Celeb)-[r:CASTMEMBER]->(to:Movie) WHERE ( r.roles={1} ) RETURN r as rel, n as from, to as to
 ] for params [[1:[Neo]]

Using find with a Date argument fails

Trying to execute something like this on a Neo4j entity:

Person.find("MATCH (n:`Person`) WHERE (n.`dueDate` = {value}) RETURN n", [value: new Date()])

is throwing this error:

org.neo4j.driver.v1.exceptions.ClientException: Unable to convert java.util.Date to Neo4j Value.
at org.neo4j.driver.v1.Values.value(Values.java:96)
at org.neo4j.driver.v1.Values.value(Values.java:232)
at org.neo4j.driver.internal.InternalTransaction.run(InternalTransaction.java:146)
at grails.neo4j.Neo4jEntity$Trait$Helper.find(Neo4jEntity.groovy:267)
at grails.neo4j.Neo4jEntity$Trait$Helper.find(Neo4jEntity.groovy:263)x

multi tenancy not wokring in relationship

Hi there,

In multi tenant relationship, tenantId is not persisted.

class Membership implements MultiTenant<Membership>, Relationship<User, Team> {
    static mapWith = "neo4j"
    Long tenantId
}

So i get error with finder queries because tenantId does not exist.

Running integration test are not using the right configuration

Trying to
run grails test-app :integration

seems that it's not getting the right DataSource config.
I have this configured on the environments section:

test {
    grails {
        neo4j {
            type = "embedded"
            location = "${myEnv}/data"
            embedded {
                options = [
                    'dbms.active_database': "graph_test.db",
                ]
            }
        }
    }

but it's trying to use "remote" type and therefore not finding the right db and throwing the following exception:

Caused by: org.neo4j.driver.v1.exceptions.ClientException: Unable to connect to 'localhost' on port 7687, ensure the database is running and that there is a working network connection to it. at org.neo4j.driver.internal.connector.socket.SocketClient.start(SocketClient.java:79) at org.neo4j.driver.internal.connector.socket.SocketConnection.<init>(SocketConnection.java:63) at org.neo4j.driver.internal.connector.socket.SocketConnector.connect(SocketConnector.java:52) at org.neo4j.driver.internal.pool.InternalConnectionPool$1.allocate(InternalConnectionPool.java:191) at org.neo4j.driver.internal.pool.InternalConnectionPool$1.allocate(InternalConnectionPool.java:180) at org.neo4j.driver.internal.pool.ThreadCachingPool.allocate(ThreadCachingPool.java:212) at org.neo4j.driver.internal.pool.ThreadCachingPool.acquireFromGlobal(ThreadCachingPool.java:164) at org.neo4j.driver.internal.pool.ThreadCachingPool.acquire(ThreadCachingPool.java:118) at org.neo4j.driver.internal.pool.InternalConnectionPool.acquire(InternalConnectionPool.java:109) at org.neo4j.driver.internal.InternalDriver.session(InternalDriver.java:53) at org.grails.datastore.gorm.neo4j.Neo4jDatastore.setupIndexing(Neo4jDatastore.java:385) at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:107) at org.grails.datastore.gorm.neo4j.Neo4jDatastore.<init>(Neo4jDatastore.java:217) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)

Orphan objects are not removed when removing them from parent collection

Let's say we have:

class Person {
    static hasMany = [phones: Phone]
}

class Phone {
    String phoneNumber

   static belongsTo = Person
}

if we do this:

person1.removeFromPhones(phone1)
person1.update()

Shouldn't that delete the whole Phone object from the db in addition to the relationship? We don't see it's doing that.
We also tried to add some mapping like this:

static mapping = {
    phones cascade: "all-delete-orphan"
}

with no luck.

Unit tests failing after upgrade to 6.1

Getting the following exception in many unit tests. It was working fine on 6.0.9. Is there anything that we need to change in tests?

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.grails.datastore.gorm.GormStaticApi@7d3de280' with class 'org.grails.datastore.gorm.GormStaticApi' to class 'org.grails.datastore.gorm.neo4j.api.Neo4jGormStaticApi'
	at grails.neo4j.Neo4jEntity$Trait$Helper.find(Neo4jEntity.groovy:243)
	at com.brinqa.platform.core.model.Attribute.getDataModel(Attribute.groovy:190)
	at com.brinqa.platform.core.model.Attribute._clinit__closure6$_closure7(Attribute.groovy:83)
	at groovy.lang.Closure.call(Closure.java:414)
	at org.grails.validation.ValidatorConstraint.processValidate(ValidatorConstraint.java:87)
	at grails.validation.AbstractConstraint.validate(AbstractConstraint.java:107)
	at grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:979)
	at org.grails.validation.GrailsDomainClassValidator.validatePropertyWithConstraint(GrailsDomainClassValidator.java:206)
	at org.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:81)
	at org.grails.datastore.gorm.GormValidationApi.doValidate(GormValidationApi.groovy:116)
	at org.grails.datastore.gorm.GormValidationApi.validate(GormValidationApi.groovy:197)
	at org.grails.datastore.gorm.GormValidateable$Trait$Helper.validate(GormValidateable.groovy:97)
	at com.brinqa.platform.core.model.DataModel$__clinit__closure23.closure25$_closure26(DataModel.groovy:98)
	at com.brinqa.platform.core.model.DataModel._clinit__closure23$_closure25(DataModel.groovy:97)
	at groovy.lang.Closure.call(Closure.java:414)
	at org.grails.validation.ValidatorConstraint.processValidate(ValidatorConstraint.java:87)
	at grails.validation.AbstractConstraint.validate(AbstractConstraint.java:107)
	at grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:979)
	at org.grails.validation.GrailsDomainClassValidator.validatePropertyWithConstraint(GrailsDomainClassValidator.java:206)
	at org.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:81)
	at org.grails.datastore.gorm.GormValidationApi.doValidate(GormValidationApi.groovy:116)
	at org.grails.datastore.gorm.GormValidationApi.validate(GormValidationApi.groovy:197)
	at org.grails.datastore.gorm.GormValidateable$Trait$Helper.validate(GormValidateable.groovy:97)
	at com.brinqa.platform.analytics.AnalyticsControllerSpec.createDataModels(AnalyticsControllerSpec.groovy:299)
	at com.brinqa.platform.analytics.AnalyticsControllerSpec.test execute (age transformation)(AnalyticsControllerSpec.groovy:90)

Allow no arg neo4j driver config options

Neo4j driver team has added few additional config options such as,

withEncryption()
withoutEncryption()
withLeakedSessionsLogging()
withConnectionLivenessCheckTimeout( long value, TimeUnit unit )

Currently only single arg with methods are supported. It would be good to extend support for no args or more than one args.

Gorm is executing some extra queries that can lead to deadlocks

When we are updating an existing object that has some relationships, we see that RelationshipPendingInsert is deleting and creating the same relationship. Doing this is throwing some tasks in Neo4j and can lead to certain lock conditions (maybe related with this issue neo4j/neo4j#6914).
Is there a way to avoid this and check if the relationship needs to be recreated ?
We are seeing same behavior both on v6.0.0 and 5.0.10.
This is a sample app where you can see it: https://github.com/mburak/neo4j-app

2016-07-01 17:59:38,035 [localhost-startStop-1] DEBUG RelationshipPendingInsert:109 DELETE Cypher [MATCH (from:Club {id: {start}})-[r:rival{sourceType:'Club',targetType:'Club'}]->() DELETE r] for parameters [{start=4162776920394866693, end=[4162776920394866689]}]
2016-07-01 17:59:38,036 [localhost-startStop-1] DEBUG RelationshipPendingInsert:134 MERGE Cypher [MATCH (from:Club), (to:Club) WHERE from.id = {start} AND to.id IN {end} MERGE (from)-[r:rival{sourceType:'Club',targetType:'Club'}]->(to)] for parameters [{start=4162776920394866693, end=[4162776920394866689]}]

Getting UnexpectedRollbackException on integration tests (on latest 6.0.3 snapshot)

When running the integration tests we are getting this:

org.springframework.transaction.UnexpectedRollbackException: Rollback exception, originated at (org.grails.datastore.gorm.neo4j.Neo4jDatastoreTransactionManager@5517e36b) null; nested exception is java.lang.NullPointerException
    at org.codehaus.groovy.grails.transaction.ChainedTransactionManager.rollback(ChainedTransactionManager.java:208)
    at org.codehaus.groovy.grails.test.support.GrailsTestTransactionInterceptor.destroy_closure2(GrailsTestTransactionInterceptor.groovy:85)
    at groovy.lang.Closure.call(Closure.java:426)
    at org.codehaus.groovy.grails.test.support.GrailsTestTransactionInterceptor.destroy(GrailsTestTransactionInterceptor.groovy:83)
    at grails.test.spock.IntegrationSpec.destroyTransaction(IntegrationSpec.groovy:89)
    at grails.test.spock.IntegrationSpec.cleanup(IntegrationSpec.groovy:70)
Caused by: java.lang.NullPointerException
    at org.grails.datastore.mapping.transactions.DatastoreTransactionManager.doRollback(DatastoreTransactionManager.java:179)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:849)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:826)
    at org.codehaus.groovy.grails.transaction.MultiTransactionStatus.rollback(MultiTransactionStatus.java:82)
    at org.codehaus.groovy.grails.transaction.ChainedTransactionManager.rollback(ChainedTransactionManager.java:191)
    ... 5 more

Dynamic associations are not loaded correctly when they have instance level labels

We have the following classes:

class Player extends AbstractGraphDomain {

    String name

    static mapping = {
        dynamicAssociations true
        labels "__Player__", { GraphPersistentEntity pe, Player instance ->
            "Player__${instance.name}"
        }
    }

}

class Club extends AbstractGraphDomain {

    String name

    static mapping = {
        dynamicAssociations true
        labels "__Club__", { GraphPersistentEntity pe, Club instance ->
            "Club__${instance.name}"
        }
    }

}

We set a dynamic property called "club" to a player object. Then when we try to access that property we are getting the following exception:

org.grails.datastore.mapping.engine.NonPersistentTypeException: [__Club__, Club__club1]
        at org.grails.datastore.gorm.neo4j.engine.DynamicAssociationSupport.loadDynamicAssociations(DynamicAssociationSupport.java:91)
        at grails.neo4j.Neo4jEntity$Trait$Helper$_getAt_closure1.doCall(Neo4jEntity.groovy:83)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at groovy.lang.Closure.call(Closure.java:414)
        at groovy.lang.Closure.call(Closure.java:430)
        at org.grails.datastore.gorm.GormStaticApi$_withSession_closure21.doCall(GormStaticApi.groovy:811)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at groovy.lang.Closure.call(Closure.java:414)
        at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:54)
        at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:124)
        at com.sun.proxy.$Proxy102.doInSession(Unknown Source)
        at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:319)
        at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:40)
        at org.grails.datastore.gorm.GormStaticApi.withSession(GormStaticApi.groovy:810)
        at grails.neo4j.Neo4jEntity$Trait$Helper.getAt(Neo4jEntity.groovy:82)
        at grails.neo4j.Neo4jEntity$Trait$Helper$getAt$0.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at core.Player.getAt(Player.groovy)
        at grails.neo4j.Neo4jEntity$Trait$Helper.propertyMissing(Neo4jEntity.groovy:54)
        at grails.neo4j.Neo4jEntity$Trait$Helper$propertyMissing.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at core.Player.propertyMissing(Player.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaClassImpl.invokeMissingProperty(MetaClassImpl.java:883)
        at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1864)
        at groovy.lang.ExpandoMetaClass.getProperty(ExpandoMetaClass.java:1155)
        at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3763)
        at groovy.lang.ExpandoMetaClass.getProperty(ExpandoMetaClass.java:1167)
        at core.AbstractGraphDomain.getProperty(AbstractGraphDomain.groovy)
        at core.Player.getProperty(Player.groovy)
        at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:50)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
        at core.InitializeService.$tt__initialize(InitializeService.groovy:20)
        at core.InitializeService$_initialize_closure1.doCall(InitializeService.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
        at groovy.lang.Closure.call(Closure.java:414)
        at core.InitializeService$_initialize_closure1.call(InitializeService.groovy)
        at groovy.lang.Closure.call(Closure.java:430)
        at core.InitializeService$_initialize_closure1.call(InitializeService.groovy)
        at grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93)
        at core.InitializeService.initialize(InitializeService.groovy)
        at core.InitializeService$initialize.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
        at sampleapp2.BootStrap.initialize(BootStrap.groovy:14)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)

You can reproduce that by running the project in https://github.com/mburak/sampleapp

Relationships are wrong after having several operations on the same tx

It looks that it's not creating the relationships correctly when i'm creating/updating different objects that have dynamic relationships in the same tx. At the end they relationships are in the incorrect nodes.

You can see the this sample app https://github.com/mburak/neo4j-app where we are creating a link between a Club and a Player with a dynamic association called 'captain'. If you check the db after startup, those relationships are wrong. And also you can see the logs where it's doing a lot of relationship creation for the same object to different targets which doesn't make sense. These are some of them:

2016-07-22 12:08:19,681 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,682 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658075142]}]
2016-07-22 12:08:19,682 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,683 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658116101]}]
2016-07-22 12:08:19,683 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,684 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658107909]}]
2016-07-22 12:08:19,685 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,686 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658066949]}]
2016-07-22 12:08:19,687 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,688 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658075138]}]
2016-07-22 12:08:19,690 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,690 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658132480]}]
2016-07-22 12:08:19,691 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:110   DELETE Cypher [MATCH (from:Player {__id__: {start}})-[r:captain{sourceType:'Player',targetType:'Player'}]->() DELETE r] for parameters [{start=4162803605658157059}]
2016-07-22 12:08:19,691 [localhost-startStop-1] DEBUG   RelationshipPendingInsert:135   MERGE Cypher [MATCH (from:Player), (to:Player) WHERE from.__id__ = {start} AND to.__id__ IN {end} MERGE (from)-[r:captain{sourceType:'Player',targetType:'Player'}]->(to)] for parameters [{start=4162803605658157059, end=[4162803605658116097]}]

Lazy loading working incorrectly?

We are seeing a lot of queries of this kind:

2016-07-23 09:49:52,080 [http-nio-8080-exec-4]  DEBUG   Neo4jAssociationQueryExecutor:98    Lazy loading association [com.brinqa.platform.apps.Application->createdBy] using relationship (from:Application:CI__Application)-[:CREATEDBY]->(to:User)

even when we don't have an explicit lazy: false on the Application mapping. Shouldn't be lazy by default?
Is there any configuration we are missing?

StackOverflowError while saving dirty objects that were not explicitly saved

I'm trying to save a bunch of objects (400 or so) without explicitly save, so it waits until the end of the tx and tries to persist the dirty ones on tx commit/flush.
If the object has dynamic associations GORM is trying to check if they are dirty and it tries to retrieve the related object to do that and that triggers a new flush we generates an stack overflow error.
You can reproduce this starting this project https://github.com/mburak/neo4j-app on a new db and doing an ajax call to this url: http://localhost:8080/neo4j-app/clubs/updatePlayers
I'm pasting part of the stack trace.

2017-01-17 15:38:51,410	[http-nio-8080-exec-3]	DEBUG	Neo4jEntityPersister:340	unmarshalling entity [app.Player] with id [3100080889764118544], props node<619>, {}
2017-01-17 15:38:51,410	[http-nio-8080-exec-3]	DEBUG	Neo4jEntityPersister:359	QUERY Cypher [MATCH (m:Player {__id__:{id}})-[r]-(o) RETURN type(r) as relType, startNode(r)=m as out, r.sourceType as sourceType, r.targetType as targetType, {ids: collect(o.__id__), labels: collect(labels(o))} as values] for parameters [{id=3100080889764118544}]
2017-01-17 15:38:51,412	[http-nio-8080-exec-3]	DEBUG	Neo4jDatastoreTransactionManager:128	Initiating transaction commit
2017-01-17 15:38:51,413	[http-nio-8080-exec-3]	DEBUG	Neo4jDatastoreTransactionManager:128	Flushing Session prior to transaction commit [org.grails.datastore.gorm.neo4j.Neo4jSession@58c62fb0]
2017-01-17 15:38:51,729	[http-nio-8080-exec-3]	DEBUG	Neo4jDatastoreTransactionManager:141	Initiating transaction rollback after commit exception
java.lang.StackOverflowError
	at org.grails.datastore.mapping.dirty.checking.DirtyCheckable$Trait$Helper$hasChanged$0.call(Unknown Source)
	at app.Player.hasChanged(Player.groovy)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.shouldIgnore(Neo4jEntityPersister.java:789)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistEntity(Neo4jEntityPersister.java:668)
	at org.grails.datastore.mapping.engine.EntityPersister.persist(EntityPersister.java:183)
	at org.grails.datastore.mapping.core.AbstractSession.persist(AbstractSession.java:583)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.persistDirtyButUnsavedInstances(Neo4jSession.java:715)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.flush(Neo4jSession.java:642)
	at org.grails.datastore.mapping.query.Query.flushBeforeQuery(Query.java:681)
	at org.grails.datastore.mapping.query.Query.list(Query.java:554)
	at org.grails.datastore.mapping.query.Query.singleResult(Query.java:579)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.retrieveEntity(Neo4jEntityPersister.java:235)
	at org.grails.datastore.mapping.engine.EntityPersister.retrieve(EntityPersister.java:219)
	at org.grails.datastore.mapping.core.AbstractSession.retrieve(AbstractSession.java:639)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.initializeTarget(SessionEntityProxyMethodHandler.java:69)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.resolveDelegate(SessionEntityProxyMethodHandler.java:57)
	at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.getProxyTarget(EntityProxyMethodHandler.java:111)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.handleInvocationFallback(SessionEntityProxyMethodHandler.java:83)
	at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.handleInvocation(EntityProxyMethodHandler.java:78)
	at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.invoke(GroovyObjectMethodHandler.java:141)
	at app.Tag_$$_javassist_7.hasChanged(Tag_$$_javassist_7.java)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistAssociationsOfEntity(Neo4jEntityPersister.java:808)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.registerPendingUpdate(Neo4jEntityPersister.java:785)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistEntity(Neo4jEntityPersister.java:687)
	at org.grails.datastore.mapping.engine.EntityPersister.persist(EntityPersister.java:183)
	at org.grails.datastore.mapping.core.AbstractSession.persist(AbstractSession.java:583)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.persistDirtyButUnsavedInstances(Neo4jSession.java:715)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.flush(Neo4jSession.java:642)
	at org.grails.datastore.mapping.query.Query.flushBeforeQuery(Query.java:681)
	at org.grails.datastore.mapping.query.Query.list(Query.java:554)
	at org.grails.datastore.mapping.query.Query.singleResult(Query.java:579)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.retrieveEntity(Neo4jEntityPersister.java:235)
	at org.grails.datastore.mapping.engine.EntityPersister.retrieve(EntityPersister.java:219)
	at org.grails.datastore.mapping.core.AbstractSession.retrieve(AbstractSession.java:639)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.initializeTarget(SessionEntityProxyMethodHandler.java:69)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.resolveDelegate(SessionEntityProxyMethodHandler.java:57)
	at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.getProxyTarget(EntityProxyMethodHandler.java:111)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.handleInvocationFallback(SessionEntityProxyMethodHandler.java:83)
	at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.handleInvocation(EntityProxyMethodHandler.java:78)
	at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.invoke(GroovyObjectMethodHandler.java:141)
	at app.Tag_$$_javassist_7.hasChanged(Tag_$$_javassist_7.java)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistAssociationsOfEntity(Neo4jEntityPersister.java:808)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.registerPendingUpdate(Neo4jEntityPersister.java:785)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistEntity(Neo4jEntityPersister.java:687)
	at org.grails.datastore.mapping.engine.EntityPersister.persist(EntityPersister.java:183)
	at org.grails.datastore.mapping.core.AbstractSession.persist(AbstractSession.java:583)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.persistDirtyButUnsavedInstances(Neo4jSession.java:715)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.flush(Neo4jSession.java:642)
	at org.grails.datastore.mapping.query.Query.flushBeforeQuery(Query.java:681)
	at org.grails.datastore.mapping.query.Query.list(Query.java:554)
	at org.grails.datastore.mapping.query.Query.singleResult(Query.java:579)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.retrieveEntity(Neo4jEntityPersister.java:235)
	at org.grails.datastore.mapping.engine.EntityPersister.retrieve(EntityPersister.java:219)
	at org.grails.datastore.mapping.core.AbstractSession.retrieve(AbstractSession.java:639)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.initializeTarget(SessionEntityProxyMethodHandler.java:69)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.resolveDelegate(SessionEntityProxyMethodHandler.java:57)
	at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.getProxyTarget(EntityProxyMethodHandler.java:111)
	at org.grails.datastore.mapping.proxy.SessionEntityProxyMethodHandler.handleInvocationFallback(SessionEntityProxyMethodHandler.java:83)
	at org.grails.datastore.mapping.proxy.EntityProxyMethodHandler.handleInvocation(EntityProxyMethodHandler.java:78)
	at org.grails.datastore.mapping.proxy.GroovyObjectMethodHandler.invoke(GroovyObjectMethodHandler.java:141)
	at app.Tag_$$_javassist_7.hasChanged(Tag_$$_javassist_7.java)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistAssociationsOfEntity(Neo4jEntityPersister.java:808)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.registerPendingUpdate(Neo4jEntityPersister.java:785)
	at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.persistEntity(Neo4jEntityPersister.java:687)
	at org.grails.datastore.mapping.engine.EntityPersister.persist(EntityPersister.java:183)
	at org.grails.datastore.mapping.core.AbstractSession.persist(AbstractSession.java:583)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.persistDirtyButUnsavedInstances(Neo4jSession.java:715)
	at org.grails.datastore.gorm.neo4j.Neo4jSession.flush(Neo4jSession.java:642)
	at org.grails.datastore.mapping.query.Query.flushBeforeQuery(Query.java:681)

Lazy loaded associations error

I have this model

`package sampleneo4japp

class Activity {

static mapWith = "neo4j"

String description

Person owner
Category category

static belongsTo = [owner: Person]

static constraints = {

}

static mapping = {
    owner fetch:"eager"
}

}
`
When I try to render it in a json view I have the following error:

Request processing failed; nested exception is grails.views.ViewRenderException: Error rendering view: Proxy for [sampleneo4japp.Category] for association [sampleneo4japp.Category] could not be initialized

captura de pantalla de 2017-11-21 10-04-04

Same thing happens if you try to use activity.category in controller's action, If you map the relationship as fetch "eager" this error disappears

To reproduce it you can download the following application

https://github.com/mvinas1977/sampleNeo4jApp

and execute:

http://localhost:8080/activity/showFull?description=Activity%201

if you execute next link it will work fine because doesn't include category association, just owner that is eager

http://localhost:8080/activity/show?description=Activity%201

error in findByFromAndTo

If i findByFromAndTo i get this error:

Example:

class Membership implements Relationship<User, Team> {
    static mapWith = "neo4j"

  static mapping = {
            type: "IS_PLAYER"
        }
}

Membership membership = Membership.findByFromAndTo(User.get(id), Team.get(id))

Error:

Variable `from` not defined (line 1, column 51 (offset: 50))
"MATCH (n:User)-[r:MEMBERSHIP]->(to:Team) WHERE ( ID(from)={1} AND ID(to)={2} ) RETURN r as rel, n as from, to as to "

Cypher query is not translated correctly, and if relationship type is configured in the mapping block, it should be taken in finderQueries without Specifying it like findByFromAndToAndType().

Cannot load entities with dynamic labels (on latest snapshot)

Loading related entities got broken after this commit: 81f13bc

2016-10-24 14:36:38,255 [localhost-startStop-1] ERROR   StackTrace:213  Full Stack Trace:
org.grails.datastore.mapping.engine.NonPersistentTypeException: [Player, club_FC Barcelona]
    at org.grails.datastore.gorm.neo4j.Neo4jMappingContext.findPersistentEntityForLabels(Neo4jMappingContext.java:144)
    at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.unmarshall(Neo4jEntityPersister.java:561)
    at org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister.unmarshallOrFromCache(Neo4jEntityPersister.java:281)
    at org.grails.datastore.gorm.neo4j.collection.Neo4jResultList.nextDecodedInternal(Neo4jResultList.groovy:91)
    at org.grails.datastore.gorm.neo4j.collection.Neo4jResultList.nextDecoded(Neo4jResultList.groovy:79)
    at org.grails.datastore.gorm.query.AbstractResultList.convertObject(AbstractResultList.java:97)
    at org.grails.datastore.gorm.query.AbstractResultList.get(AbstractResultList.java:82)
    at org.grails.datastore.mapping.query.Query.singleResult(Query.java:580)
    at org.grails.datastore.gorm.finders.AbstractFindByFinder.invokeQuery(AbstractFindByFinder.java:35)
    at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:29)
    at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:318)
    at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:42)
    at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:27)
    at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:174)
    at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:374)
    at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:173)
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.staticMethodMissing(GormEntity.groovy:749)
    at BootStrap.initUEFA(BootStrap.groovy:144)

You can see that on the project at https://github.com/mburak/neo4j-app

Checking for a dynamic association is marking all relationships as dirty

Having the following persistent class:

class Player extends AbstractGraphDomain {

    String name
    Application application

    static mapping = {
        dynamicAssociations true
    }

When I load an object of that class from the db:

        Player player = Player.findByName("player1")

and then check for any dynamic property:

        if (player.clubs == null) {
            player.clubs = [club1, club2]
        }

if that property is null, is getting into the DynamicAssociationSupport and loading all the relationships and putting them in the object:

object.putAt(key.getType(), value);

which is weird but also this is causing the relationships properties to be dirty.

You can reproduce this behaviour by downloading: https://github.com/mburak/sampleapp and checking out branch 'dup-assoc'.
1 - Start app on an empty db.
2 - Call rest url http://localhost:8080/player/updatePlayer2

Error when running app in Production Environment

I get this error when running app in PRODUCTION Environment (i'm using grails 3.2.6).
In DEVELOPMENT Environment, it works well.

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@26b894bd: startup date [Mon Feb 13 23:39:10 CET 2017]; root of context hierarchy
        at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:404)
        at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97)
        at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968)
        at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1033)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:555)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:388)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:375)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at testapp326.Application.main(Application.groovy:8)

2017-02-13 23:39:14.322 ERROR --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Destroy method on bean with name 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor' threw an exception

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@26b894bd: startup date [Mon Feb 13 23:39:10 CET 2017]; root of context hierarchy
        at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:404)
        at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97)
        at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968)
        at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1033)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:555)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:388)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:375)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at testapp326.Application.main(Application.groovy:8)

2017-02-13 23:39:14.325 ERROR --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Destroy method on bean with name 'grailsApplicationPostProcessor' threw an exception

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@26b894bd: startup date [Mon Feb 13 23:39:10 CET 2017]; root of context hierarchy
        at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:404)
        at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97)
        at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968)
        at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1033)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:555)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:388)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:375)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at testapp326.Application.main(Application.groovy:8)

2017-02-13 23:39:14.340 ERROR --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Destroy method on bean with name 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory' threw an exception

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@26b894bd: startup date [Mon Feb 13 23:39:10 CET 2017]; root of context hierarchy
        at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:404)
        at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97)
        at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968)
        at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1033)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:555)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:388)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:375)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at testapp326.Application.main(Application.groovy:8)

2017-02-13 23:39:14.359 ERROR --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embeddedServletContainerCustomizerBeanPostProcessor': BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateDatastore': Unsatisfied dependency expressed through method 'setMessageSource' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Invocation of init method failed; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:479)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:235)
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:702)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:527)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:388)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:375)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at testapp326.Application.main(Application.groovy:8)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateDatastore': Unsatisfied dependency expressed through method 'setMessageSource' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Invocation of init method failed; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:667)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:92)
        at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:101)
        at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.findCandidateAdvisors(AnnotationAwareAspectJAutoProxyCreator.java:88)
        at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:103)
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:248)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:1037)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:1011)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:473)
        ... 19 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateDatastore': Unsatisfied dependency expressed through method 'setMessageSource' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Invocation of init method failed; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:648)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:923)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:804)
        at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:558)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395)
        at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1260)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1180)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1096)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:659)
        ... 45 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateDatastore': Unsatisfied dependency expressed through method 'setMessageSource' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Invocation of init method failed; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:667)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
        ... 61 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Invocation of init method failed; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:659)
        ... 71 common frames omitted
Caused by: java.lang.NullPointerException: null
        at org.grails.spring.context.support.PluginAwareResourceBundleMessageSource.afterPropertiesSet(PluginAwareResourceBundleMessageSource.java:115)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
        ... 81 common frames omitted


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':bootRun'.
> Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
| Error Failed to start server (Use --stacktrace to see the full trace)

Here is my build.gradle:

buildscript {
    repositories {
        mavenLocal()
        maven { url "https://repo.grails.org/grails/core" }
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:$grailsVersion"
        classpath "org.grails.plugins:hibernate5:6.0.7"
        classpath "org.grails.plugins:views-gradle:1.1.5"
    }
}

version "0.1"
group "testapp326"

apply plugin:"eclipse"
apply plugin:"idea"
apply plugin:"war"
apply plugin:"org.grails.grails-web"
apply plugin:"org.grails.plugins.views-json"

repositories {
    mavenLocal()
    maven { url "https://repo.grails.org/grails/core" }
}

dependencyManagement {
    imports {
        mavenBom "org.grails:grails-bom:$grailsVersion"
    }
    applyMavenExclusions false
}

def gormVersion='6.1.0.BUILD-SNAPSHOT'

configurations.all {
    exclude(group:'org.grails',module:'grails-datastore-simple')

    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if(details.requested.group == 'org.grails'
                && details.requested.name.startsWith('grails-datastore')
        ) {
            details.useVersion(gormVersion)
        }
    }
}

dependencies {
    compile "org.springframework.boot:spring-boot-starter-logging"
    compile "org.springframework.boot:spring-boot-autoconfigure"
    compile "org.grails:grails-core"
    compile "org.springframework.boot:spring-boot-starter-actuator"
    compile "org.springframework.boot:spring-boot-starter-tomcat"
    compile "org.grails:grails-plugin-url-mappings"
    compile "org.grails:grails-plugin-rest"
    compile "org.grails:grails-plugin-codecs"
    compile "org.grails:grails-plugin-interceptors"
    compile "org.grails:grails-plugin-services"
    compile "org.grails:grails-plugin-datasource"
    compile "org.grails:grails-plugin-databinding"
    compile "org.grails:grails-plugin-async"
    compile "org.grails:grails-web-boot"
    compile "org.grails:grails-logging"
    compile "org.grails.plugins:cache"
    compile "org.grails.plugins:hibernate5"
    compile "org.hibernate:hibernate-core:5.1.2.Final"
    compile "org.hibernate:hibernate-ehcache:5.1.2.Final"

    compile "org.grails.plugins:neo4j:$gormVersion"

    compile "org.grails.plugins:views-json"
    compile "org.grails.plugins:views-json-templates"
    console "org.grails:grails-console"
    profile "org.grails.profiles:rest-api"
    runtime "com.h2database:h2"
    testCompile "org.grails:grails-plugin-testing"
    testCompile "org.grails.plugins:geb"
    testCompile "org.grails:grails-datastore-rest-client"
    testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
    testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"
}

bootRun {
    jvmArgs('-Dspring.output.ansi.enabled=always')
}

Using belongsTo is not deleting in cascade

Having this schema:

class Person {
  static hasMany = [addresses: Address]
}
class Address {
  belongsTo = Address
}

when deleting the person, it should delete all the related addresses, but it's not doing it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.