Skip to content

Instantly share code, notes, and snippets.

@graemerocher
Last active April 2, 2017 22:36
  • Star 20 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save graemerocher/c25ec929d9bcd1adcbea to your computer and use it in GitHub Desktop.
GORM for Hibernate in Groovy Script
@Grab("org.grails:grails-datastore-gorm-hibernate4:3.0.0.RELEASE")
@Grab("org.grails:grails-spring:2.3.6")
@Grab("com.h2database:h2:1.3.164")
import grails.orm.bootstrap.*
import grails.persistence.*
import org.springframework.jdbc.datasource.DriverManagerDataSource
import org.h2.Driver
init = new HibernateDatastoreSpringInitializer(Person)
def dataSource = new DriverManagerDataSource(Driver.name, "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE", 'sa', '')
init.configureForDataSource(dataSource)
println "Total people = " + Person.count()
@Entity
class Person {
String name
static constraints = {
name blank:false
}
}
@graemerocher
Copy link
Author

You can compile the domain classes separately in a Gradle or Maven project. See for example

https://github.com/spring-guides/gs-accessing-data-gorm/tree/master/complete

Note that the project uses Spring Boot, but you can omit the boot parts if you don't want it

@nvinet
Copy link

nvinet commented Jul 10, 2014

Hi guys,

I'm giving a go using GORM outside Grails and the documentation is quite sparse, especially when not using Spring-Boot and around the unit testing. Grails has tons of test mixins around GORM. Is there a strategy to adopt when testing GORM outside Grails?

@rodrigorodriguescosta
Copy link

OK, it works like we have in this script, but if I increment a little bit the example something does not work as expected, example, the GORM does not inject addTo method to the class, see

@entity
class Person {
String name
Profile profile

static hasMany = [contacts:Contacts]

static constraints = {
    name blank:false
}

}

@entity
class Profile {
String name
}

@entity
class Contacts {
static belongsTo = [person: Person]
String name
}

Profile profile = new Profile(name: "Profile1")
profile.save(flush: true)

Person p = new Person(name: "RODRIGO", profile: profile)

p.addToContacts(name: "contact1")

if(!p.save()){
puts p.errors
}

println "Total people = " + Person.count()

it reproduces the message : groovy.lang.MissingMethodException: No signature of method: Person.addToContacts() is applicable for argument types: (java.util.LinkedHashMap) values: [[name:contact1]]
Possible solutions: getContacts()

See? is there any workaround?

@ysb33r
Copy link

ysb33r commented Jan 1, 2016

There is quite a number of failures with this if trying to use it with 5.0.0.M1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment