Генерировать порядковый номер для приложения-широкое использование


Я должен генерировать порядковый номер для для Groovy и Grails приложение широкое использование и придумал следующее. Однако, есть лучший способ сделать это?

Классы домен:

class RoastIdCounter {
    int counter =0
    static constraints = {
    }
}

Это один не имеет представления или контроллер, связанный с ним. Это чисто для взаимодействия БД в класс службы.

class RoastId {
    Family family
    Integer nextId
    long timeCreated = new Date().time

    static constraints = {
        family()
        nextId()
    }
    static belongsTo = [ Family ]
}

class Family  extends {

    String farmId;
    String welcome;
    String familyName;
    String ourFarm;
    String howMuchDoWeGetPaid;

    SortedSet pictureAlbums;
    SortedSet pictures;

    Integer pictureAlbumsCount = 0;
    Integer picturesCount = 0;

    Date dateCreated = new Date()
    Date lastUpdated = new Date()

    static hasMany = [ roastIds : RoastId, pictureAlbums : PictureAlbum, pictures : Picture ]

    static constraints = {
        farmId()
        familyName( )
        welcome( widget:'textarea' )
        ourFarm( widget:'textarea' )
        howMuchDoWeGetPaid( widget:'textarea' )

        dateCreated()
        lastUpdated()
}

    String toString() { "$farmId - $familyName" }

} // Family

Класс обслуживания, занимающихся генерацией номер:

class RoastIdCounterService {

    static transactional = true

    def getNextRoastId() {

        def ric = RoastIdCounter.list()[-1]

        if( ric != null ){
            ric.lock()
            ric.counter = ric.counter + 1
            ric.save()
            return ric.counter
        } else {
            return -1 
        }
    }
}

Контроллер:

Здесь я просто посылаю объект все предварительно заполненные:

def create = {
    def roastIdInstance = new RoastId()
    roastIdInstance.properties = params
    roastIdInstance.nextId = roastIdCounterService.getNextRoastId()
    return [roastIdInstance: roastIdInstance]
}

Среда: Файл Grails 1.3.7, В PostgreSQL 8.4

Будет ли лучше способ сделать это? Какие потенциальные проблемы я с видом?



1723
8
задан 23 февраля 2011 в 08:02 Источник Поделиться
Комментарии