Pessoal tenho duas Classes, Usuarios e Niveis de Usuarios da seguinte forma:
// Definindo as Named Queryes.
@NamedQueries({
@NamedQuery ( name = "EntUsNivel.DescNivel", query = "from EntUsNivel nv where nv.niv_descricao = :descricao"),
@NamedQuery ( name = "EntUsNivel.CarregaNivel", query = "from EntUsNivel nv order by nv.niv_descricao")
})
// Definindo os Dados da Tabela.
@Entity
@Table( name= "usu_nivel" )
@SequenceGenerator( name = "nome_seq", sequenceName = "niv_codigo", allocationSize = 1, initialValue = 1 )
public class EntUsNivel implements java.io.Serializable {
private static final long serialVersionUID = 1L;
// Definindo as Colunas do Banco de Dados.
@Id
@GeneratedValue(generator="nome_seq")
private Integer niv_codigo;
@Column(name= "niv_descricao", length = 50)
private String niv_descricao;
public EntUsNivel(){
}
// Metodos Construtor.
E a Classe de Usuarios :
// Definindo as Named Queryes.
@NamedQueries({
@NamedQuery ( name = "usu_UsuariosLogin", query = "from EntUsUsuarios usu where usu.usu_login = :lg and usu.usu_senha = :pw" ),
@NamedQuery ( name = "usu_UsuariosCarregar", query = "from EntUsUsuarios usu"),
@NamedQuery ( name = "usu_UsuariosCondicao", query = "from EntUsUsuarios usu where usu.usu_codigo = :usu_codigo")
})
// Definindo os Dados da Tabela.
@Entity
@Table( name = "usu_usuarios" )
@SequenceGenerator( name = "nome_seq", sequenceName = "usu_codigo", allocationSize = 1, initialValue = 1 )
public class EntUsUsuarios implements java.io.Serializable{
private static final long serialVersionUID = 1L;
// Definindo as Colunas do Banco de Dados.
@Id
@GeneratedValue(generator="nome_seq")
private Integer usu_codigo;
@Column(length = 100)
private String usu_nome;
@Column(length = 50)
private String usu_login;
@Column(length = 32)
private String usu_senha;
@Column
private int usu_ativo;
@Column( nullable = true)
@Temporal(javax.persistence.TemporalType.DATE)
private Date usu_dtexpira;
@Column( nullable = true)
@Temporal(javax.persistence.TemporalType.DATE)
private Date usu_dtcadastro;
@Column( nullable = true)
@Temporal(javax.persistence.TemporalType.DATE)
private Date usu_dtalteracao;
@OneToOne
@JoinColumn(name = "usu_cod_nivel", nullable = true)
private EntUsNivel usu_cod_nivel;
public EntUsUsuarios(){
}
A Pergunta e a Seguinte, estou fazendo da melhor maneira, pois cada usuario deve ter somente um nivel de usuario, por isso implementei onetoone.
Na hora de salvar estou fazendo assim :
try
{
// Instanciando o Nivel de Usuarios.
EntUsNivel nivelUsu = new EntUsNivel();
// Verificar se Existe Algo na Combo.
if(cbNivel.getSelectedIndex()!= -1){
// Pegar o Grupo de Usuarios.);
Query nivel = ses.getNamedQuery("EntUsNivel.DescNivel").setString("descricao", cbNivel.getSelectedItem().toString());
nivelUsu = (EntUsNivel) nivel.uniqueResult();
}
// Instanciando os Usuarios.
EntUsUsuarios usuarios = new EntUsUsuarios();
// Repassando os Dados do Usuario.
usuarios.setUsu_nome(txNome.getText());
usuarios.setUsu_login(txLogin.getText());
usuarios.setUsu_senha(txsenha.getText().toUpperCase());
// Se Estiver Incluindo Dados.
if(Operacao == 1)
usuarios.setUsu_dtcadastro(funcoes.FStringToDate(txDtCadastro.getText()));
// Se Estiver Alterando Dados.
if(Operacao == 2)
usuarios.setUsu_dtalteracao(funcoes.FStringToDate(txDtAlteracao.getText()));
usuarios.setUsu_dtexpira(funcoes.FStringToDate(txDtAlteracao.getText()));
// Configurar se o Usuario Esta Ativo ou nao.
if(cbAtivo.isSelected())
usuarios.setUsu_ativo(1);
// Se o Nivel nao For Nulo.
if(nivelUsu.getNiv_codigo() != null){
usuarios.setUsu_cod_nivel(nivelUsu);
}
// Instanciando a Classe DAO de Usuarios.
usUsuariosDAO userDao = new usUsuariosDAO();
// Se Estiver Incluindo Dados
if(Operacao == 1){
userDao.IncluirUsuario(usuarios);
}
O que nao estou gostando e que tenho que toda vez fazer uma consulta sql para pegar o nivel de usuario, gostaria de saber se existe outra forma de fazer isso ? Obrigado a todos, forte abraco.