[RESOLVIDO]ManyToOne - chave estrangeira nao persiste

3 respostas
F

Bom pessoal,

Estou a pouco tempo desenvolvendo em java e confesso que é uma linguagem que é fascinante mais difícil de entender e que em alguns casos dá nó na cabeça.

Procurei muito aqui por assunto semelhante ao meu mais de todos que li mesmo assim só fiquei mais confuso.

Meu caso:

  • Mapeamento ManyToOne a chave estrangeira na grava da tabela filha.

Tenho a classe Empresa (onde uma empresa pode ter varios usuarios)
Tenho a clase Usuario (onde vários usuarios pode estar relacionado a uma empresa);

/****/
package br.com.fransys.erp.empresa;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;

import br.com.fransys.erp.usuario.Usuario;

@Entity
public class Empresa {
	@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(cascade={CascadeType.PERSIST}, mappedBy = "empresa" )
	private List<Usuario> usuarios = new ArrayList<Usuario>();
	
	public List<Usuario> getUsuarios() {
		return usuarios;
	}
	
	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
	
	public Integer getCodemp() {
		return codemp;
	}
	public void setCodemp(Integer codemp) {
		this.codemp = codemp;
	}
	public String getNomemp() {
		return nomemp;
	}
	public void setNomemp(String nomemp) {
		this.nomemp = nomemp;
	}
	public Integer getQtdusu() {
		return qtdusu;
	}
	public void setQtdusu(Integer qtdusu) {
		this.qtdusu = qtdusu;
	}
	public String getSitemp() {
		return sitemp;
	}
	public void setSitemp(String sitemp) {
		this.sitemp = sitemp;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codemp == null) ? 0 : codemp.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Empresa other = (Empresa) obj;
		if (codemp == null) {
			if (other.codemp != null)
				return false;
		} else if (!codemp.equals(other.codemp))
			return false;
		return true;
	}
	
}


Classe Usuario

package br.com.fransys.erp.usuario;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.*;



import br.com.fransys.erp.empresa.Empresa;

@Entity
@Table(name="usuario")
public class Usuario implements Serializable {

	@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(cascade = CascadeType.PERSIST, optional = false, fetch = FetchType.EAGER)
	@JoinColumn(name="codemp", nullable = false, referencedColumnName = "codemp", foreignKey = @ForeignKey(name = "fk_usuario_empresa"))
	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>();
	
	
	
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getCpfcnp() {
		return cpfcnp;
	}
	public void setCpfcnp(String cpfcnp) {
		this.cpfcnp = cpfcnp;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public Date getNascimento() {
		return nascimento;
	}
	public void setNascimento(Date nascimento) {
		this.nascimento = nascimento;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public String getIdioma() {
		return idioma;
	}
	public void setIdioma(String idioma) {
		this.idioma = idioma;
	}
	public boolean isAtivo() {
		return ativo;
	}
	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}
	public Set<String> getPermissao() {
		return permissao;
	}
	public void setPermissao(Set<String> permissao) {
		this.permissao = permissao;
	}


Metodo Salvar UsuarioBean

	public String salvar(){
	/*	
		this.destinoSalvar = "usuariosucesso";
		this.usuario = new Usuario();
		this.usuario.setAtivo(true);
	*/	
		this.destinoSalvar = "usuariosucesso";
		this.usuario.setAtivo(true);
		this.usuario.setEmpresa(empresa);
		
		FacesContext context = FacesContext.getCurrentInstance();
		
		String senha = this.usuario.getSenha();
		if(!senha.equals(this.confirmarSenha)){
			FacesMessage facesMessage = new FacesMessage("A senha não foi confirmada corretamente!");
			context.addMessage(null, facesMessage);
			return null;
		}
		
		UsuarioRN usuarioRN = new UsuarioRN();
		
		usuarioRN.salvar(this.usuario);
		
		return this.destinoSalvar;
	}

3 Respostas

T

Pelo que entendi, você quer persistir os dois objetos juntos. Passa o código de quando você faz o persist.

Gabriel_Rodriguez

Explica um pouco mais da ideia geral, se você realmente quer persistir os dois objetos juntos explica como você atribui valor aos atributos dessas das classes Empresa e Usuário. Se é um projeto web ou desktop explana um pouco mais, como o Trickstival já havia pedido ehehehehhe…

F

Bom dia Gabriel e trickstival

Muito solicito.

Obrigado pela atenção.

Eu estava com esse problema sim. Acabei encontrando uma solução.

Desculpas por não ter se expressado melhor, nas proximas tentarei dar mais detalhes.

obrigado,

Criado 5 de janeiro de 2017
Ultima resposta 13 de jan. de 2017
Respostas 3
Participantes 3