Field com valor Null
24/04/2015 00:11
0
Galera, não consegui entender o pq de dar erro: Field erro in object 'projeto.Aluno' on field 'telefone': rejected value [null]
Possuo a seguinte classe.
class Usuario {
 String nome
 String username
 String password
 boolean enabled = true
 boolean accountExpired
 boolean accountLocked
 boolean passwordExpired
}

E outras duas classes que herdam dela:
class Aluno extends Usuario{

 String sexo
 String observacao
 static hasOne = [responsavel: Responsavel]

static constraints = {}
}

class Responsavel extends Usuario{

 String profissao
 String localDeTrabalho
 static belongsTo = [aluno: Aluno]

static constraints = {}
}


Minha classe BootStrap

class BootStrap {

def init = { servletContext ->
  def responsavel = new Responsavel(
profissao:"Militar",
localDeTrabalho:"PM",
nome:"Joaozinho",
telefone:"000000",
username:"joaozinho",
password:"123456",
enabled:true,
accountExpired:false,
accountLocked:false,
passwordExpired:false)

  def aluno = new Aluno(
sexo:"M",
observacao:"Nenhuma",
nome:"Aluno",
telefone:"0000000",
username:"aluno",
password:"12345",
enabled:true,
accountExpired:false,
accountLocked:false,
passwordExpired:false,
responsavel:responsavel)

  if (!aluno.save()) {
aluno.errors.each {
println it
}
  }
}
def destroy = {

}
}


Se rodar dessa forma funciona de boa, mas se eu colocar mais um atributo na classe Usuario por exemplo, telefone, ele não roda e é informado o erro descrito.
Consegui resolver fazendo por exemplo, aluno.telefone = "1232321", mas da outra forma não vai. Valeu, espero que tenham entendido :)
Tags: field, null


0
Se o seu atributo pode ser nulo, coloque isto em constraints:
static constraints = {
?telefone(nullable:true)
}
24/04/2015 09:34


0
O que está estranho é que em nenhuma das suas Domains esse telefone foi declarado. Existe no banco de dados mas não existe mais na domain. É isso?

Se sim, você poderia simplesmente excluir a coluna no banco de dados. Não?
24/04/2015 11:12


0
Olá adriano como falei, nas classes acima não está  o atributo telefone, mas se eu colocar esse atributo na classe Usuario que é herdada pelas outras classes da pau.
24/04/2015 13:07


0
G13ydson, nem Aluno tem esse campo e nem Usuario, que é de quem Aluno herda, tem esse campo. Usuario não herda de ninguém. Enfim.

No seu banco de dados, existe o campo telefone? Você consegue achar no projeto onde que está esse campo telefone? Se não encontrar, dê um clean no seu projeto e execute-o de novo, pois esse campo parece estar preso a alguma versão mais antiga. 
24/04/2015 15:06


1
Olá,
Entendi que dá erro quando você adiciona o atributo telefone na classe Usuario, contudo não vejo motivo para ocorrer o erro se o atributo for declarado e o objeto for populado corretamente.
Pode ser que exista a coluna telefone no banco de dados e talvez a mesma tenha alguma restrição que não esteja sendo atendida, porém para lhe auxiliar precisamos de mais informações sobre o cenário em que o erro ocorre (classes, se há ou não uma coluna telefone no banco e como ela está...)
24/04/2015 20:31


0
Achei estranho tbm, ñ há nenhuma restrição no atributo. Estou estudando o framework para um projeto e estamos começando com coisas simples para entender o funcionamento. Resolvi setar os valores da forma normal mesmo.  objeto.atributo = algumacoisa
24/04/2015 22:27


0
? ? ? ? ? ? ? ? ? ? ? ? ?


0
Salvo erros da minha parte, quando voce declara um atributo do tipo string o mesmo tem a constraint nullable = false.
Isso significa dizer que voce não pode inserir valor nulo nesse campo.
? ?


0
Vou repetir uma pergunta que fiz anteriormente nesse post: "Você consegue achar no projeto onde que está esse campo telefone?" 

Se conseguir encontrar, post aqui pra nós aonde está declarando o campo telefone.

Abraços ;)
27/04/2015 10:17


0
Vou descrever novamente :)
Possuo a classe Usuario acima e as classes Responsável e Aluno que herdam de usuário. A classe Usuário possui aqueles atributos básicos e com eles consigo persistir normalmente, mas quando insiro mais um atributo na classe Usuário, por exemplo Telefone o erro é mostrado. Nenhum atributo possui constraint. São apenas testes
O problema é que quando passo os parâmetros para o construtor usando Map o erro é exibido, mas usando a outra forma com os Set's o erro não é exibido.
Bem, estou usando com os sets e está rodando de boa agora :) . Valeu galera o/
27/04/2015 11:06


1
G13ydson, eu entendi o problema, o que acontece é que esse campo telefone não é mágico, o framework não insere por default. Logo, é preciso identificar a origem desse campo pra poder resolver seu problema da melhor forma. Esse campo podia existir em uma versão anterior da App e estar preso no contexto, existir na tabela como obrigatório, enfim.

Sei que é nele que está o erro, o problema é que ele não existe (pelo menos não nas classes que você quotou aqui). 

Tente dar um clean no seu projeto e exclua o campo do BD pra pelo menos ver se o erro muda. Abraços ;)
27/04/2015 12:06



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto