Galera,
Quero fazer uma ‘troca de mensagens’ em um sistema. Então, tenho uma interface Autenticavel, que seria:
Medico, Paciente e Funcionario. Tenho o Remetente na classe Mensagem, e tenho uma collection de mensagens em cada uma
das entidades (como destinatario).
A seguir o código da classe Mensagem:
@Entity
@Table(name="mensagens")
public class Mensagem{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer codigo;
@Column(length=100)
private String titulo;
@Column(columnDefinition="TEXT")
private String mensagem;
@Temporal(TemporalType.TIMESTAMP)
private Date data;
@Column(columnDefinition="TINYINT(1) DEFAULT 0")
private Boolean lida = false;
@Any(metaColumn = @Column(name = "tipo_emissor"), optional = false)
@AnyMetaDef(idType = "integer", metaType = "string", metaValues =
{
@MetaValue(value = "M", targetEntity = Medico.class),
@MetaValue(value = "P", targetEntity = Paciente.class),
@MetaValue(value = "F", targetEntity = Funcionario.class) })
@JoinColumn(name = "codigo_emissor")
private Autenticavel remetente;
Agora trechos de código das classes que implementam Autenticavel:
//medico
@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="mensagens_do_medico", joinColumns=@JoinColumn(columnDefinition="medico_id"),
inverseJoinColumns=@JoinColumn(columnDefinition="mensagem_codigo"))
@Sort(type=SortType.NATURAL)
private SortedSet<Mensagem> mensagens;
//paciente
@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="mensagens_do_paciente", joinColumns=@JoinColumn(columnDefinition="paciente_id"),
inverseJoinColumns=@JoinColumn(columnDefinition="mensagem_codigo"))
@Sort(type=SortType.NATURAL)
private SortedSet<Mensagem> mensagens;
//funcionario
@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="mensagens_do_funcionario", joinColumns=@JoinColumn(columnDefinition="funcionario_codigo"),
inverseJoinColumns=@JoinColumn(columnDefinition="mensagem_codigo"))
@Sort(type=SortType.NATURAL)
private SortedSet<Mensagem> mensagens;
Bom, o que acontece é que vou fazer um form para cadastrar no banco uma mensagem. Tambem vou ter um campo
para selecionar os destinatários. Mas eu tenho um ‘portal’ para cada tipo de usuario. Se for Medico ele tera o crud da mensagem
onde o usuario setado já sera registrado como remetente. E idem para o Paciente e Funcionario. Minha dúvida:
se vou registrar uma entidade do tipo Mensagem no banco de dados
(ou seja:)
meuDao.save(mensagem);
como eu vou fazer para inserir também os destinatários, sendo que na entidade mensagem eu não tenho um array de “Autenticavel”???
abraços
