Boa tarde galera. Estou a vários dias tentando desenvolver um sistema onde tenho duas tabelas relacionadas a tabela pessoa e a tabela servidor. o código na tabela Servidor é a chave primária desta tabela e também chave estrangeira em relação a tabela pessoa. Para que o meu sistema funcione adequadamante, preciso informar o código da pessoa para a tabela servidor. Eu gostaria de fazer isso, selecionando um usuário qualque na jtable. Contudo, não gostaria de fazer com o auxílio do netbeans, pois ele cria muitos códigos que não consigo entender completamente. Eu criei um usuário e servidor, normal somente com métodos set e get, mas não funciona. tentei usar os componentes persistências, gerenciador de entidade, consulta e resultado da consulta. se eu colocar no servidor do uma consulta tipo select*from servidor, gera uma exceção dizendo que há um problema com essa query. veja o meu servidor:
public class Servidor {
@Id
private Integer Usuario_idUsuario;
private String siape;
private String lotacao;
/**
* @return the Usuario_idUsuario
*/
public Integer getUsuario_idUsuario() {
return Usuario_idUsuario;
}
/**
* @param Usuario_idUsuario the Usuario_idUsuario to set
*/
public void setUsuario_idUsuario(Integer Usuario_idUsuario) {
this.Usuario_idUsuario = Usuario_idUsuario;
}
/**
* @return the siape
*/
public String getSiape() {
return siape;
}
/**
* @param siape the siape to set
*/
public void setSiape(String siape) {
this.siape = siape;
}
/**
* @return the lotacao
*/
public String getLotacao() {
return lotacao;
}
/**
* @param lotacao the lotacao to set
*/
public void setLotacao(String lotacao) {
this.lotacao = lotacao;
}
}
No exemplo criado pelo netbeans, ele cria uma query desse modo:
@Entity
@Table(name = "servidor", catalog = "biblioteca", schema = "")
@NamedQueries({
@NamedQuery(name = "Servidor.findAll", query = "SELECT s FROM Servidor s"),
@NamedQuery(name = "Servidor.findByUsuarioidUsuario", query = "SELECT s FROM Servidor s WHERE s.usuarioidUsuario = :usuarioidUsuario"),
@NamedQuery(name = "Servidor.findBysiape", query = "SELECT s FROM Servidor s WHERE s.siape = :siape"),
@NamedQuery(name = "Servidor.findByLotacao", query = "SELECT s FROM Servidor s WHERE s.lotacao = :lotacao")})
e mais outros códigos difernciados para os métodos set e get dos campos, assim:
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "Usuario_idUsuario")
private Integer usuarioidUsuario;
@Basic(optional = false)
@Column(name = "Siape")
private String siape;
@Basic(optional = false)
@Column(name = "Lotacao")
private String lotacao;
@JoinColumn(name = "Usuario_idUsuario", referencedColumnName = "idUsuario", insertable = false, updatable = false)
@OneToOne(optional = false)
private Usuario usuario;
@JoinColumn(name = "Usuario_idUsuario", referencedColumnName = "idUsuario", updatable = false, insertable = false)
@ManyToOne
private Usuario usuarioIdusuario;
public Servidor() {
}
public Servidor(Integer usuarioidUsuario) {
this.usuarioidUsuario = usuarioidUsuario;
}
public Servidor(Integer usuarioidUsuario, String siape, String lotacao) {
this.usuarioidUsuario = usuarioidUsuario;
this.siape = siape;
this.lotacao = lotacao;
}
public Integer getUsuarioidUsuario() {
return usuarioidUsuario;
}
public void setUsuarioidUsuario(Integer usuarioidUsuario) {
Integer oldUsuarioidUsuario = this.usuarioidUsuario;
this.usuarioidUsuario = usuarioidUsuario;
changeSupport.firePropertyChange("usuarioidUsuario", oldUsuarioidUsuario, usuarioidUsuario);
}
public String getSiape() {
return siape;
}
public void setSiape(String siape) {
String oldSiape = this.siape;
this.siape = siape;
changeSupport.firePropertyChange("Siape", oldSiape, siape);
}
public String getLotacao() {
return lotacao;
}
public void setLotacao(String lotacao) {
String oldLotacao = this.lotacao;
this.lotacao = lotacao;
changeSupport.firePropertyChange("lotacao", oldLotacao, lotacao);
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
@Override
public int hashCode() {
int hash = 0;
hash += (usuarioidUsuario != null ? usuarioidUsuario.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Servidor)) {
return false;
}
Servidor other = (Servidor) object;
if ((this.usuarioidUsuario == null && other.usuarioidUsuario != null) || (this.usuarioidUsuario != null && !this.usuarioidUsuario.equals(other.usuarioidUsuario))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.prototipo.view.Servidor[ usuarioidUsuario=" + usuarioidUsuario + " ]";
}
public Usuario getUsuarioIdusuario() {
return usuarioIdusuario;
}
public void setUsuarioIdusuario(Usuario usuarioIdusuario) {
Usuario oldUsuarioIdusuario = this.usuarioIdusuario;
this.usuarioIdusuario = usuarioIdusuario;
changeSupport.firePropertyChange("usuarioIdusuario", oldUsuarioIdusuario, usuarioIdusuario);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
}
Contudo, gostaria de saber se há como conseguir o mesmo resultado usando persistência na minha classe servidor sem ter que fazer todas essas alterações criadas pelo próprio netBeans. como devo alterar minha classe para que funcione corretamente sem ter que incluir todos esses códigos?