This is a simple Grails plugin to provide some common utility classes & methods which is used in almost all applications.
Only Grails 4+ applications are supported.
Add the following to build.gradle
file of your Grails 3 application
Under repositories
section
maven { url 'https://jitpack.io' }
Under dependencies
section
compile "com.wizpanda:kernel-hibernate:0.0.1" // Use whatever is the latest version
By default, Grails domain uses the auto-increment Long id
in every domain classes. This id
is not secure for many scenarios as it is
guessable. An alternative to this approach is to use Hibernate's UUID generator-
static mapping = {
id generator: "uuid", length: 32
}
The problem here is that the length of the id
is quite long i.e. 32 characters. So you can use CustomIdDomain
here. To use this, just
extend this class to your domain class and remove any String id
property & it's mapping
(if added)-
package com.wizpanda.user
import com.wizpanda.kernel.hibernate.id.CustomIdDomain
class User extends CustomIdDomain {
// Note- If there is no mapping defined, make sure to add an empty mapping block as defined below
static mapping = {
}
String email
String firstName
}
This is a utility class to provide some methods. For example, you can use HibernateSessionUtils.flushAndClear()
when bulk importing
some Grails domain records to prevent the servers from getting out of memory. For example, the below code creates 1 Million domain
records in bulk. After a certain number of records, your server will end-up with no memory left because Grails caches those records
until the session is flushed.
To prevent that, we added a check which will flush & clear the Hibernate's current session-
(1..1000000).eachWithIndex { int number, int index ->
User user = new User(name: "John Doe", email: "john${number}@example.com")
user.save()
if (index % 1000 == 0) {
HibernateSessionUtils.instance.flushAndClear()
}
}