Galera,
estou tentando seguir o conselho de modelagem conforme foi me sugerido no tópico:
http://www.guj.com.br/java/276418-vraptor-como-ele-comporta-com-relacionamento-n-n-com-atributos/
Então estou criando a seguinte estrutura:
MensagemContainer: vai conter a mensagem que quero enviar, o destinatario e se foi lida ou não.
@Entity
@Table(name="mensagem_container")
public class MensagemContainer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer codigo;
@ManyToOne(cascade=CascadeType.ALL)
private Mensagem mensagem;
@Column(columnDefinition="TINYINT(1) DEFAULT 0")
private Boolean lida = false;
@Any(metaColumn = @Column(name = "tipo_autenticavel"), fetch=FetchType.EAGER, optional = false )
@AnyMetaDef(idType = "integer", metaType = "string", metaValues =
{
@MetaValue(value = "A", targetEntity = Aluno.class),
@MetaValue(value = "P", targetEntity = Professor.class),
@MetaValue(value = "F", targetEntity = Funcionario.class) })
@JoinColumn(name = "codigo_autenticavel")
private Autenticavel destinatario;
Mensagem conterá o titulo, a mensagem, o remetente e uma lista de MensagemContainer.
@OneToMany(cascade=CascadeType.ALL)
private List<MensagemContainer> mensagensContainer;
O Professor (que implementa a interface Autenticavel), vai conter tbem uma lista de MensagemContainer):
@OneToMany
private List<MensagemContainer> mensagensConteiners;
Esses relacionamentos e essas anotações estão corretas? Ele gerou as tabelas direitinho, mas agora estou perdido
Vejam só eu tinha um MensagemController, onde o usuario logado poderá:
ver as mensagens que ele enviou
ver a inbox dele
escrever nova mensagem
Antes era facil, o vraptor criava para mim o Mensagem m no método save (post) e já era… Montava tudo certinho.
Agora vou ter que ter o que? Na essencia quero cadastrar Mensagem, porém tenho o MensagemContainer agora.
Por tanto teria que cadastrar o MensagemContainer.
Estou perdidinho, tão perdido que nao consigo nem expor de forma mais clara as minhas dúvidas.
Bom, de todo jeito eu vou ter que cadastrar no banco um objeto do tipo Mensagem. Depois que eu
cadastrei essa mensagem eu tenho que cadastrar o MensagemContainer.
Como faria isso? Pensei na seguinte solução, mas nao sei se rola:
Solução 1: crio um List para representar os destinatarios na minha classe Mensagem. Essa lista não é mapeada no banco. Aí, depois que eu salvar a mensagem, dentro da logica do salvar mensagem eu faço algo parecido como:
for(Autenticavel dest : mensagem.getDestinatarios()){
MensagemContainer mc = new MensagemContainer();
mc.setMensagem(mensagem);
mc.setDestinatario(dest);
mensagemContainerDao.save(mc);
}
o que acham disso?