Dominios e mais dominios
27/06/2012 02:47
0
Pessoal,

Estou na página 125 do livro Grails in Action e estou com uma pequena dúvida.

Tenho os seguintes domínios:

package com.grailsinaction

class Post {

// mapstyle
// Posso chegar no Usuário atravez de um Post,
// tanto quando posso chegar em um Post atravez do
// usuário
static belongsTo = [usuario: Usuario]
static hasMany = [tags: Tag]

String conteudo
Date dataCriacao = new Date()

static constraints = {
conteudo(blank: false)
}

static mapping = {
sort dataCriacao:"desc"
}


}


package com.grailsinaction

class Profile {

// relação um para um ->> unidirecional
// Você pode chegar em um Profile via um Usuário, mas
// não o inverso --> relação 1:1
static belongsTo = Usuario

byte[] photo
String fullName
String bio
String homepage
String email
String timezone
String country
String jabberAddress

static constraints = {
fullName(nullable: true)
bio(nullable: true, maxSize: 1000)
email(email:true, nullable: true)
photo(nullable: true)
country(nullable: true)
timezone(nullable: true)
jabberAddress(email: true, nullable: true)
}
}


package com.grailsinaction

class Tag {

String name
Usuario usuario

static constraints = {
name(blank:false)
}

static belongsTo = [Usuario, Post]
static hasMany = [posts: Post]
}


package com.grailsinaction

class Usuario {
String usuarioId
String senha
String homepage
Date dataCriacao = new Date()
Profile profile

static constraints = {
usuarioId(maxsize: 20, size:3..20, unique: true)
senha(size:6..8,
validator: { senha_aux, usuario ->
return senha_aux != usuario.usuarioId }
)
homepage(url:true,nullable:true) // opcional com url patter
dataCriacao()
profile(nullable: true)
}

// relação 1:m
// Um usuário tem vários Posts
static hasMany = [posts: Post, tags: Tag]

static mapping = {
// Nesse caso sempre quando Grails carregar um usuário,
// ele vai carregar o profile junto, tambem podemos
// declara-lo eagerly (lazy é o que usamos)
profile (lazy:false) // Grails carrega profile com o usuario
// Permite ordenar os post quando acessarmos a collection posts
// atravez de um usuário
posts sort: 'dataCriacao'
}
}


Eu entendi perfeitamente as relações de 1:1, 1:m e m:n, mas uma coisa me deixou maluco.

No dominio Tag você tem uma composição com o dominio Usuario.... porque isso?
Um usuário tem variais Tags e vários Posts... então eu não deveria ter que colocar essa referencia "Usuario usuario" em ambos?

Ai vem outra questão tabem, se eu sei que o dominio Tag belongsTo Usuario, eu sei que meu usuario x tem tais Tags... não preciso no dominio Tags determinar qual usuário ha criou, pois com a chave estrangeira eu encontro isso...afinal Tags pertence a Usuario

Achei engraçado que o GORM trata a relação do Usuario com a Tag diferente se eu tiro a referencia ao objeto "Usuario usuario".... isso me deixou muito confuso, pois ai ele cria uma outra tabela com a chave usuario_id e a respectiva chave da tag (tag_id)...??? e destroi a chave usuario_id que estava na tabela de Tags...

MAAAAAAS se eu troco a referencia de "Usuario usuario" para "Post post" por exemplo ELE MANTEM.... usuario_id na tabela Tags

Alguem por favor me explica essa loucara... so não entendi isso
Tags: Tags Grails in Action Problema


0
eu uso sempre a documentação do grails de uma olhada nesse link http://grails.org/doc/latest/ref/Domain%20Classes/belongsTo.html

isso pode te ajudar a entender as remoções em cascata e outras vantagem de relacionamentos bem feito

espero ter ajudado...


27/06/2012 16:46


0
Back references, i.e. properties linking back to the owner, can be added in one of two ways:


class Book {
Author author
static belongsTo = Author
}


Agora entendi, o dominio Usuario declarado em Tag é uma propriedade para linkar a tag devolta para o Usuário.
27/06/2012 17:24


0
Pessoal,

Sei que estou mudando um pouco de assunto, mas na implementação da aplicação hubbub da apostila, o cara sala o byte[] no banco.... isso não seria um erro grosseiro?

O ideal não seria salvar o caminho no FTP dessa imagem e acessa-la?
27/06/2012 19:05


0
Usar bytes numa classe de domínio é uma maneira fácil de gravar algum arquivo no banco de dados. Por exemplo, uma foto de um usuário.

Isso tem que usar com muito cuidado, gravar arquivo no banco de dados pode dar muito problema além de poder fazer seu banco ficar muito grande desnecessariamente dificultando backup etc.

Eu particularmente evito ao máximo gravar arquivo em banco. Mas há quem goste e não vê problema em fazer isso.
27/06/2012 20:00


0
concordo com o rcauler. porem em minhas 2 aplicaçoes preciso salvar fotos e dispo-las em uma galeria assim eu limitei o tamanho dos arquivos para não sobrecarregar o banco!
28/06/2012 11:27


0
Daniel,
existe esse livro em português?

Abs
28/06/2012 19:11


0
Infelizmente não
03/07/2012 16:13



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