o Entity esta para a persistencia assim como o Session esta para o negocio.
Qdo vc cria um Entity Bean 3.0 eh algo semelhante a isso?
@Entity
@Table(name = “USUARIO”, schema = “GUJ”, uniqueConstraints = {})
public class Usuario implements java.io.Serializable {
// Fields
private String dscLogin;
private String dscSenha;
// Property accessors
@Id
@Column(name = "DSC_LOGIN", unique = true, nullable = false, insertable = true, updatable = true, length = 10)
public String getDscLogin() {
return this.dscLogin;
}
public void setDscLogin(String dscLogin) {
this.dscLogin = dscLogin;
}
@Column(name = "DSC_SENHA", unique = false, nullable = false, insertable = true, updatable = true)
public String getDscSenha() {
return this.dscSenha;
}
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "scaUsuario")
public Set<ScaUsuarioPerfil> getScaUsuarioPerfils() {
return this.scaUsuarioPerfils;
}
public void setScaUsuarioPerfils(Set<ScaUsuarioPerfil> scaUsuarioPerfils) {
this.scaUsuarioPerfils = scaUsuarioPerfils;
}
Isso para mim eh um componente de persistencia projetado para Mapeamento O/R.
A questao do acoplamento que citei eh justamente por o Concern de um Entity Bean eh refletir no mundo Orientado a Objetos Dados do Mundo Relacional. Na minha visao esta eh a funca do Entity Bean.
A questao de vc estar enviando esse mesmo entity para a camada de apresentacao para digamos ser utilizado para mostrar dados em uma pagina JSP, vc esta acoplando o jsp ao entity Bean.
Ok o entity bean eh um pojo, portanto vc pode retirar os annotations, e pronto, deixou de ser um entity bean e passou a ser um VO.
O DTO realmente concordo que cria um overhead grande e muitas vezes desnecessario. Porem ele prove este tipo de abstracao.
Digamos q eu precise ou queira mudar a minha camada de persistencia.
CASO 1: com uma camada de DTO essa mudanca eh transparente para a apresentacao.
CASO2: Com entities beans vc pode retirar todos os anotations e ele passara a ser um POJO e tera justamente a funcao de um DTO. e vc tera o overhead provido pelo DTO.
CASO3: pode mudar todos os POJOS trafegados entre as camadas.
eh…realmente com ejb 3.0 acho q DTO nao sao nescessarios.