Chave estrangeira atualizada automaticamente [RESOLVIDO]

Pra minha aplicação ficar completa pra quem puder testar segue as classes hibernate e DAO ( dao na verdade é o nome da minha classe q é uma session factory e hibernate é o nome da minha classe que faz o função de dao :slight_smile: ainda vou arrumar isso mas por enquanto tudo bem…

Casse hibernate (faz o papel de DAO):


package br.com.sistaxi.hibernate;



import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.sistaxi.beans.Usuario;

public class Hibernate {
	private Session session;
	private String mensagem;
	Dao dao = new Dao();

	public String salva(Object objeto) {
		try {
			session = dao.abreSessao(objeto);
			session.save(objeto);
			dao.fechaSessao(session);
			return "Informação salva com sucesso!";
		} catch (Exception e) {

			mensagem = "Erro: " + e;
			return mensagem;
		}

	}

	public boolean validaLogin(Usuario usuario) {
		session = dao.abreSessao(usuario);
		Criteria select = session.createCriteria(usuario.getClass());
		select.add(Restrictions.eq("login", usuario.getLogin()));
		select.add(Restrictions.eq("senha", usuario.getSenha()));
		select.add(Restrictions.eq("situacao", "ativo"));
		if (select.list().isEmpty()) {
			dao.fechaSessao(session);
			return false;
		} else {
			dao.fechaSessao(session);
			return true;
		}

	}

	@SuppressWarnings("unchecked")
	public ArrayList<Usuario> listaUsuario(Usuario usuario) {
		session = dao.abreSessao(usuario);
		List<Usuario> lista = new ArrayList<Usuario>();
		lista = session.createCriteria(Usuario.class).list();
		// dao.fechaSessao(session);
		return (ArrayList<Usuario>) lista;

	}

	public Usuario getById(int id) {
		Usuario usuario = new Usuario();
		session = dao.abreSessao(usuario);

		usuario = (Usuario) session.get(Usuario.class, id);
		dao.fechaSessao(session);
		return usuario;

	}

	public Usuario getUsuarioByLoginSenha(Usuario usuario) {
		session = dao.abreSessao(usuario);
		Criteria select = session.createCriteria(usuario.getClass());
		select.add(Restrictions.eq("login", usuario.getLogin()));
		select.add(Restrictions.eq("senha", usuario.getSenha()));
		dao.fechaSessao(session);
		return usuario;
	}

}

Classe Dao (faz o papel de session factory):

package br.com.sistaxi.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

import br.com.sistaxi.beans.PerfilUsuario;
import br.com.sistaxi.beans.Usuario;

public class Dao {

	public Session abreSessao(Object objeto) {

		AnnotationConfiguration cfg = new AnnotationConfiguration();
		//cfg.addAnnotatedClass(objeto.getClass());
		cfg.addAnnotatedClass(PerfilUsuario.class);
		cfg.addAnnotatedClass(Usuario.class);
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();

		return session;

	}

	public void fechaSessao(Session session) {
		session.getTransaction().commit();
		session.close();
	}
}

hibernate.properties (não uso xml)

  # hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
   hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
   hibernate.connection.driver_class = com.mysql.jdbc.Driver
   hibernate.connection.url = jdbc:mysql://localhost/sistaxi
   hibernate.connection.username = root
   hibernate.connection.password =1234
   hibernate.show_sql = true
   hibernate.format_sql = true

cara,

fiz um teste aqui com suas classes e funcionou, vou postar aqui pra vc ver,

@Entity(name = "tabusuario")
public class Usuario implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "idUsuario")
	private int idUsuario;
	
	@Column(name = "loginUsuario")
	private String login;
	
	@Column(name = "senhaUsuario")
	private String senha;
	
	@Column(name = "situacaoUsuario")
	private String situacao;
	
	@OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL)
	private List<TabPerfilUsuario> perfilUsuarioList;

	public TabUsuario() {
		this.setPerfilUsuarioList(new ArrayList<TabPerfilUsuario>());
	}
@Entity(name = "tabperfilusuario")
public class TabPerfilUsuario implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name = "idPerfilUsuario")
	private int idPerfil;
	
	@Column(name = "nomePerfilUsuario")
	private String nome;
	
	@ManyToOne
	@JoinColumn(name = "idUsuario")
	private TabUsuario usuario;
	
	public TabPerfilUsuario(){
		
	}
public class Teste {
	public static void main(String[] args) {
		EntityManager entityManager = Persistence.createEntityManagerFactory("PERSIST_UNIT").createEntityManager();
		
		TabPerfilUsuario p = new TabPerfilUsuario();
		p.setNome("p");
		
		TabUsuario usuario = new TabUsuario();
		usuario.setLogin("teste");
		usuario.setSenha("teste");
		usuario.setSituacao("teste");
		
		p.setUsuario(usuario);
		usuario.getPerfilUsuarioList().add(p);
		
		
		entityManager.getTransaction().begin();
		entityManager.persist(usuario);
		entityManager.getTransaction().commit();
	}
}

PS: chegou ate dar aquele erro que vc postou, mas foi pq eu tinha esquecido de colocar as PK como auto incremente

da uma olhada ai…

t+

Olá amigo,

Boas noticias:

Eu notei que no seu exemplo vc colocou
@JoinColumn

e no meu exemplo estava
@JoinColumn(name = “idUsuario”, insertable = false, updatable = false)

o que eu fiz foi trocar para true nos dois campos e tudo começou a funcionar !!!

Todo meu agradecimento é pouco a todos que ajudaram aqui, principalmente ao meu novo amigo alissonvla que passou o dia inteiro me ajudando e fazendo testes …

Prometo fazer o mesmo ajudando outros assim que eu adquirir conhecimentos suficiente.

Mais uma vez muito obrigado

Problema resolvido !!!

bom q resolveu… :lol:

t+