Problema Relacionamento many-to-many
07/10/2008 00:00
0
Preciso de ajuda urgente!!!

Tenho as sseguintes classes, User, Projeto , Publicacoes e Artigo,
e quero implementar o relacionamento many-to-many entre User e Publicacoes.

Ao rodar a aplicacao, a tabela user_publication eh criada com com 3 atributos (id, id_usuario e id_publicacao)

Porem na hora em que eu vou salvar uma publicacao extoura uma excecao (dizendo que o atributo id nao possui valor default)



class User {
String login
String senha
static hasMany = [publicacoes : Publicacoes]
}

public class Projeto{
String name
static hasMany = [publicacoes : Publicacoes ]
}

public class Publicacoes{
String nome
Projeto projeto

static belongsTo = [Projeto , User]
static hasMany = [users : User]
}

public class Artigo extends Publicacoes{
String cidade

}

// classe extra de uniao entre o relacionamento
public class Uniao{
Integer usersId
Integer publicacoesId

static mapping = {
table 'user_publicacoes'
id column : 'id' // erro na insercao
usersId column:'usuarios_id'
publicacoesId column:'publicacoes_id'
}
}





// e o seguinte metodo no CONTROLADOR DO ARTIGO

def save = {
println "--> save artigo"

println "parametros: "
println params
def artigo = new Artigo(params)
println "--Artigo"

println artigo.nome
def proj = artigo.projeto
println proj.name


if(!artigo.hasErrors() && artigo.save()) {
println "--> save artigo if"
//List lista = params.users
def lista = params.artigo.users
for(i in lista)
{
println "--> save artigo if for"
def uniao = new Uniao()
uniao.usersId = i
uniao.publicacoesId = artigo.id
println i
uniao.save() /// NAO SALVA !!!!!!11
println "--> save artigo if for uniao save"
}


flash.message = "Artigo ${artigo.id} created"
redirect(action:show,id:artigo.id)
}
else {
render(view:'create',model:[artigo:artigo])
}*/
}
}




// com o seguinte view no artigo
<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;name&quot;>Internal Authors: </td>
<label for=&quot;internalAuthors&quot;>Internal Authors:</label>
</td>
<td valign=&quot;top&quot; class=&quot;value ${hasErrors(bean:artigo,field:'users','errors')}&quot;>

<g:select multiple=&quot;multiple&quot;
optionKey=&quot;id&quot;
optionValue=&quot;login&quot;
name=&quot;artigo.users&quot;
from=&quot;${User.list()}&quot;
/>
</td>
</tr>
Tags: Grails


0
Caso esteja usando o PostgreSQL, vc deve colocar na classe união assim:
id(generator:'sequence',params:[sequence:'sequence_tabela'])

<!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
04/11/2008 00:00


0
Sei que faz tempo ...
mas só por motivo de consulta de alguns outros usuários =D
passei por algo parecido um tempo atrás.

class Uniao implements Serializable {
User users
Publicacoes publicacoes

static mapping = {
table 'uniao'
id composite&#58; ['users', 'publicacoes']
version false
}

}
04/06/2010 00:00



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