Imagine um modelo de dominio qualquer, com seus respectivos códigos de negocios. Sao POJOS puros, desacoplados do banco de dados e reutilizaveis. Agora imagina que vc precisa que essa aplicacao seja distribuida, usando EJB 3. Vc precisa persistir os dados no banco, usando a recente JPA, que usa annotations.
Pergunta: dessa forma, eu nao estaria violando meu modelo de dominio, pois alem de poluir os POJOS com a annotations, tmb é possível escrever consultas usando a JPA??! Veja o trecho de codigo abaixo, retirado de um artigo da JavaMagazine 39, só pra mostrar o quanto annotations podem poluir:
....
@Entity
@NamedQueries( { @NamedQuery(name = "Reserva.listarPorPeriodo",
query = "SELECT r FROM Reserva r WHERE " +
"r.inicio >= :inicio AND r.fim <= :fim"),
@NamedQuery(name = "Reserva.ultima",
query = "SELECT r FROM Reserva r WHERE r.codigo = " +
"(SELECT MAX(r1.codigo) FROM Reserva r1)")
}
)
public class Reserva {
@Id
@Column(name = "CD_RESERVA")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer codigo;
@ManyToOne
@JoinColumn(name = "CD_CLIENTE", nullable = false)
private Cliente cliente;
@ManyToOne
@JoinColumn(name = "DS_PLACA", nullable = false)
private Veiculo veiculo;
@Column(name = "DT_INICIO", nullable = false)
@Temporal(TemporalType.DATE)
private Date inicio;
@Column(name = "DT_FIM", nullable = false)
@Temporal(TemporalType.DATE)
private Date fim;
// gets, sets
// possiveis metodos de negocios...
}
Na minha opiniao, isso nao está certo. O ideal seria manter os POJOS sem esse tipo de codigo.
Isso ai de cima nem parece um POJO. O que acham ??!
Obrigado pela ajuda.