Oi Pedro,
é exatamente o que o Dyego lhe disse: por padrão, o Grails usa uma estratégia ao lidar com herança chamada "table per hierarchy". Esta estratégia diz o seguinte: se você tem uma classe abstrata, e tem mais de uma derivada, então todos os campos destas classes derivadas, assim como os da classe abstrata irão estar presentes na mesma tabela.
Então, imagina o seguinte: que você tem uma classe abstrata pessoa como a abaixo e duas derivadas tá?
abstract class Pessoa {
String nome
}
class PessoaFisica extends Pessoa {
String cpf
}
class PessoaJuridica extends Pessoa {
String cnpj
}
Vai ser criada uma tabela com seis campos: id, version, nome, cpf, cnpj e identifier. Esta identifier vai conter um texto que nos diz qual o tipo de Pessoa que está persistido.
Um problema desta abordagem é que você não pode ter campos que neguem valores nulos. Imagine que vai salvar, por exemplo, uma PessoaFisica, mas que o campo cnpj não aceita null. O banco de dados vai chorar.
Se este não for o comportamento que você deseja, basta que na sua classe matriz você inclua um bloco como no código abaixo:
abstract class Pessoa {
String nome
static mapping = {
tablePerHierarchy false
}
}
Com isto serão geradas três tabelas, uma para cada classe, com os seus devidos relacionametnos.