Boa tarde a todos,
Estou enviando está solicitação de ajuda ao grupo de colegas desenvolvedores.
Em minha primeira mensagem creio que deixei a desejar nos dados para analise. Então obrigado pela paciência de todos e hoje tentarei postar mais uma vez o assunto de maneira que possa ser compreendida.
Sou iniciante em Java Web, estou estudando muito essa linguagem e conto com a solicitude de todos pois sei que assim como eu somos eternos aprendizes.
Sem mais delongas…
Minha dificuldade: Gravar o código da empresa que está na tabela do usuário na tabela do contaCorrente no campo codemp(chave estrangeira).
Tenho o seguinte cenário:
- Classe empresa; (Classe principal de todas notação OneToMany para as demais tabelas)
- Classe usuario; (Classe com vinculo a classe empresa ManyToOne)
- Classe contaCorrente; (Classe com vinculo a classe empresa ManyToOne)
O que estou utilizando:
- eclipse Neon;
- java 8;
- tomcat;
- hibernate (com uso do Session)
- MySql
O cenário está projetado para seguir a lógica:
Empresa tem vários funcionários ; (relacionamento OneToMany)
Empresa tem várias contasCorrentes(bancárias); (relacionamento OneToMany)
As contas correntes cadastradas devem estar ligadas a empresa e não ao usuário. Porém quem cadastra a contaCorrente é o usuário.
O usuário quando é cadastrado tem relacionamento com a empresa.
E eu não estou conseguindo fazer com que o codigo da empresa persista na tabela da contaCorrente.
Informações complementares:
Estou utilizando o SpringSecurity para o controle de acesso por usuario o controle é por login.
Classe empresa
@Entity
@Table(name="e000emp")
public class Empresa implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6027770984914382242L;
@Id
@GeneratedValue
private Integer codemp; // codigo da empresa
private String nomemp; // nome da empresa
private Integer qtdusu; // quantidade de usuarios do sistema desta empresa
private String sitemp; // status de situação da empresa (ativo / inativo)
@OneToMany(mappedBy="empresa")
private List<Usuario> usuarios = new ArrayList<Usuario>();
@OneToMany(mappedBy="empresa")
private List<ContaMovimento> contaMovto = new ArrayList<ContaMovimento>();
//getters e setters
}
Classe usuario
@Entity
@Table(name="usuario")
public class Usuario implements Serializable {
/**
*
*/
private static final long serialVersionUID = 5349608664211158549L;
@Id
@GeneratedValue
private Integer codigo;
private String nome;
private String email;
@org.hibernate.annotations.NaturalId
private String login;
private String senha;
private Date nascimento;
private String cpfcnp;
private String celular;
private String idioma;
private boolean ativo;
@ManyToOne
@JoinColumn(name="codemp", referencedColumnName = "codemp", foreignKey = @ForeignKey(name="fk_usuario_e000emp"))
private Empresa empresa;
@ElementCollection(targetClass = String.class)
@JoinTable(
name = "usuario_permissao",
uniqueConstraints = {@UniqueConstraint(columnNames = {"usuario","permissao"})},
joinColumns = @JoinColumn(name="usuario"))
@Column(name = "permissao", length=50)
private Set<String> permissao = new HashSet<String>();
//getters e setters
}
Classe contaMovimento
@Entity
@Table(name="e000ctf")
public class ContaMovimento implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7635108147549791472L;
@Id @GeneratedValue
@Column(name="codctf")
private Integer codContaMovto;
@Column(name="desctf")
private String nomeContaMovto;
@Column(name="codbco") //codigo do banco
private Integer numBanco;
@Column(name="nombco") //nome do banco
private String nomeBanco;
@Column(name="numage") //numero da agencia
private String numAgencia;
@Column(name="numctb") //numero da conta bancaria
private String numContaBanco;
@Column(name="dtaabc") //data de abertura da conta no banco
private Date dataAbertaConta;
@Column(name="dtadsd") //data de definição do saldo inicial da conta para movimento no sistema
private Date dataSaldoInicial;
@Column(name="vlrsdi") //valor do saldo inicial
private float saldoInicial;
@Column(name="dtacad", nullable=false, updatable=false) //data do cadastro no sistema
private Date dataCadastro;
@ManyToOne
@JoinColumn(name="codemp", referencedColumnName="codemp", foreignKey= @ForeignKey(name="fk_e000ctf_e000emp"))
private Empresa empresa;
public Integer getCodContaMovto() {
return codContaMovto;
}
//getters e setters
}
Como dito anteriormente é que não consigo fazer a inclusão no banco com a campo codemp = ao código da empresa que está no usuario logado.
Já fiz tentei fazer de varias maneiras e não consigo.

comando salvar - xhtml
<p:panelGrid id="btn" columns="1" columnClasses="ui-grid-col-1" layout="grid" styleClass="ui-panelgrid-blank">
<p:commandButton action="#{contaMovimentoBean.salvar}" value="Salvar"/>
</p:panelGrid>
clase contaMovimentoBean
@ManagedBean
@RequestScoped
public class ContaMovimentoBean {
private ContaMovimento selecionada = new ContaMovimento();
private List<ContaMovimento> lista = null;
public String salvar(){
ContaMovimentoRN contaMovimentoRN = new ContaMovimentoRN();
contaMovimentoRN.salvar(this.selecionada);
return "/restrito/dashboard";
}
}
clase contaMovimentoRN classe de regra
public class ContaMovimentoRN {
private ContaMovimentoDAO contaMovimentoDAO;
public ContaMovimentoRN(){
this.contaMovimentoDAO = DAOFactory.criarContaMovimentoDAO();
}
public List<ContaMovimento> listar(Empresa empresa){
return this.contaMovimentoDAO.listar(empresa);
}
public ContaMovimento carregar(Integer ctaMovto){
return this.contaMovimentoDAO.carregar(ctaMovto);
}
public void salvar(ContaMovimento ctaMovto){
ctaMovto.setDataCadastro(new Date());
this.contaMovimentoDAO.salvar(ctaMovto);
}
}
classe contaMovimentoDAo
public class ContaMovimentoDAOHibernate implements ContaMovimentoDAO {
private Session session;
public void setSession (Session session){
this.session = session;
}
@Override
public void salvar(ContaMovimento ctaMovto) {
this.session.saveOrUpdate(ctaMovto);
}
}
E tenho uma classe de contextoBean para fazer busca do usuario logado no sistema conforme pode ser observado na imagem enviada no rodapé. Mais não conseguir identificar um conjectura disto para adicionar a chamada do codigo da empresa.
classe contextoBean
@ManagedBean
@SessionScoped
public class ContextoBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = -3063140627158089130L;
private int codigoContaAtiva = 0;
private Empresa empresaLogada = null;
/*getUsuarioLogado: Obtem o login do usuário
* */
public Usuario getUsuarioLogado(){
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext external = context.getExternalContext();
String login = external.getRemoteUser(); // executa a carga desse usuario usando o método da classe UsuarioRN
if(login != null){
UsuarioRN usuarioRN = new UsuarioRN();
return usuarioRN.buscarPorLogin(login);
}
return null;
}
} ```
No mais é isso pessoal, quem puder ajudar ficarei muito agradecido.
Grande abraço a todos


