Bom dia, obrigado darlan_machado por me ajudar.
Fiz da forma que me orientou, as informações estão sendo salvas no banco porém ainda preciso corrigir dois pontos, primeiro, ao clicar no button para ir pra página de cadastrar/alterar loginUsuario não está me retornando os dados da tabela usuarioLogin para preencher os input na tela, acredito que o erro esteja nessa linha<o:viewParam name="funcionario" value="#{cadastroUsuarioLoginBean.usuarioLogin.funcionario}" /> pois funcionario é chave estrangeira e não primária, será por isso mesmo? Se sim como resolvo?
Segundo, o usuarioLogin sempre é criado e não alterado quando ele já existe, penso que é devido à primeira questão mencionada acima.
Alguem poderia me dizer como faço pra resolver essas duas questões?
Obrigado!
[]s
Segue os arquivos:
Classe UsuarioLogin
@Entity
@Table(name = "USUARIOLOGIN")
public class UsuarioLogin implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@SequenceGenerator(name="seq7", initialValue=1, allocationSize=100)
private Long id;
private String username;
private String password;
private boolean enable;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "USULOG_NIVAUT", joinColumns = @JoinColumn(name = "USU_id"), inverseJoinColumns = @JoinColumn(name = "NIVAUT_id"))
private List<NivelAutoridade> niveisAutoridade;
@OneToOne
private Funcionario funcionario;
Classe Funcionario:
@Entity
@Table(name = "funcionario")
public class Funcionario implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "profissao_id", referencedColumnName = "id")
private Profissao profissao;
@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "FuncionarioSituacao_id", referencedColumnName = "id")
private FuncionarioSituacao funcionarioSituacao;
@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "NivelAutoridade_id", referencedColumnName = "id")
private NivelAutoridade nivelAutoridade;
@OneToOne(mappedBy="funcionario")
private UsuarioLogin usuarioLogin;
@Id
@GeneratedValue
private Long id;
private String nome;
private String funcao;
Controller CadastroUsuarioBean:
@Named
@javax.faces.view.ViewScoped
public class CadastroUsuarioLoginBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private CadastroUsuariosLogin service;
private UsuarioLogin model = new UsuarioLogin();
private String tab;
public void descricaoModificada(ValueChangeEvent event) {
System.out.println("Valor antigo: " + event.getOldValue());
System.out.println("Novo valor: " + event.getNewValue());
FacesContext.getCurrentInstance().renderResponse();
}
public void prepararCadastro() {
//this.todosCodigosOcorrencia = this.codigosOcorrencia.todos();
if (this.model == null) {
this.model = new UsuarioLogin();
}
}
public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
try {
this.service.salvar(this.model);
this.model = new UsuarioLogin();
context.addMessage(null, new FacesMessage("Contato salvo com sucesso!"));
} catch (NegocioException e) {
FacesMessage mensagem = new FacesMessage(e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, mensagem);
}
return "/CadastroUsuarioLogin?faces-redirect=true";
}
public UsuarioLogin getUsuarioLogin() {
return model;
}
public void setUsuarioLogin(UsuarioLogin model) {
this.model = model;
}
}
Repositório UsuariosLogin:
public class UsuariosLogin implements Serializable {
private static final long serialVersionUID = 1L;
private EntityManager manager;
@Inject
public UsuariosLogin(EntityManager manager) {
this.manager = manager;
}
public List<UsuarioLogin> todos() {
TypedQuery<UsuarioLogin> query = manager.createQuery("from UsuarioLogin", UsuarioLogin.class);
return query.getResultList();
}
public void adicionar(UsuarioLogin model) {
this.manager.persist(model);
}
public UsuarioLogin porId(Long id) {
return manager.find(UsuarioLogin.class, id);
}
public UsuarioLogin guardar(UsuarioLogin model) {
return this.manager.merge(model);
}
public void remover(UsuarioLogin model) {
this.manager.remove(model);
}
}
Service CadastroUsuariosLogin:
public class CadastroUsuariosLogin implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private UsuariosLogin repositorios;
@Transactional
public void salvar(UsuarioLogin model) throws NegocioException {
this.repositorios.guardar(model);
}
@Transactional
public void excluir(UsuarioLogin model) throws NegocioException {
model = this.repositorios.porId(model.getId());
this.repositorios.remover(model);
}
}