在我的代码中,我有带有一些字符串字段的“Book”类和具有一些静态方法的“BookKey”字段,只有一个具有字符串“key”值的字段。我的问题是如何仅在“Book”表中存储此“键”值(而不与BookKey ID的关系)?

我不想在数据库中创建表“BookKey”。我只希望表“Book”具有列:“Key”,“Title”和“Description”,其中“Key”是BookKey对象的String值。
我知道如果我不想创建表,则必须使用static瞬变= ['key'],但是我不知道如何将来自不同对象的值存储在一个表中。

class BookKey{
    public final String key;

    public BookKey(){
        this.key="key-undefined"
    }

    public BookKey(String key){
        this.key=key;
    }

    static BookKey generate(){
        String uuid = UUID.randomUUID().toString();
        String key="book-"+uuid;
        return new BookKey(key)
    }

    static BookKey from(String key){
        return new BookKey(key)
    }
}

public class Book {
    BookKey key=BookKey.generate();
    String title;
    String description;

    static transients = ['key']

    static mapping = {
        key column: 'bKey'
    }
}

最佳答案

将BookKey类放入src/groovy中,并将您的域类配置为使用embedded。来自文档的示例:

class Person {
    String name
    Country bornInCountry
    Country livesInCountry

    static embedded = ['bornInCountry', 'livesInCountry']
}

// If you don't want an associated table created for this class, either
// define it in the same file as Person or put Country.groovy under the
// src/groovy directory.
class Country {
    String iso3
    String name
}

08-06 20:28