Nao atualiza registro com dados de outra tabela

4 respostas
rafa120

Pessoal, estou com alguns probleminha que estão me tirando o sono.

Tenho uma tabela TEAM e FLM. Na team eu tenho os campos TEAM e FLM no qual tento atualizar e só altera o team, já o FLM que vem de outra tabela nao da certo.
Não gera erro nenhum na console…
Meu banco está com update on casdade e como falei, as alterações funcionam desde q não seja relacionado com outra.
Alguma coisa faltando no código? Alguém poderia ajudar, por favor?

@Entity

@Table(name=team)

public class Team implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_team",nullable=false)
private Integer idTeam;

@Column(name="team",nullable=false)
private String team;

@OneToMany(fetch=FetchType.LAZY, targetEntity=Usuario.class,mappedBy="team")
private Set usuarios = new HashSet(0);

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_flm")
private Flm flm;

Outra classe

@Entity

@Table(name=flm)

public class Flm implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_flm",nullable=false)
private Integer idFlm;

@Column(name="name",nullable=false)
private String name;

@Column(name="username",nullable=false)
private String username;

@OneToMany(fetch=FetchType.LAZY, targetEntity=Usuario.class,mappedBy="flm")
private Set usuarios = new HashSet(0);

@OneToMany(fetch=FetchType.LAZY, targetEntity=Team.class,mappedBy="flm")
private Set teams = new HashSet(0);
public void atualizar(Team team) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            session.merge(team);
            session.beginTransaction().commit();
        } catch (Exception e){
            System.out.println("Erro ao inserir: "+e.getMessage());
            session.beginTransaction().rollback();
        } finally {
            session.close(); 
        }
    }

atualizar do flm é igual, só muda o nome.

4 Respostas

lucciano01

`já tentou com o cascade?

@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.MERGE)`

rafa120

o MERGE funciona, mas vira uma zona a tabela… altera todos registros TEAM e o FLM altera também

estou tentando encontrar o correto aqui, ja tentei REFRESH, PERSIST e ainda nao deu

D

Rafa120, o mapeamento parece estar correto. O que estou achando estranho é no seu método de inserção (merge)

session.beginTransaction();
 session.merge(team);
 session.beginTransaction().commit();

Talvez não tenha nada a ver, mas parece que após o merge, ele abre outra transação e aí faz o commit, talvez o hibernate guarde algo em memória e esteja complicando sua vida.
Tente dessa forma:

session.beginTransaction();
     session.merge(team);
     session.getTransaction().commit();
rafa120

Oi Douglas

Tentei como vc disse com beginTransaction e testando com cascade REFRESH e PERSIST, mas somente o MERGE funciona.
Eu acho que posso estar cometendo um erro ao usar o merge mesmo,
Antes eu usava session.update e me dava este erro:

Illegal attempt to associate a collection with two open sessions

E entao passei a usar o merge e acabou este erro de two sessions, mesmo assim ainda nao está atualizando da forma correta como vc está vendo aqui no topico

Mas o merge funciona ok nas tabelas onde é OneToMany, e assim achei que poderia funcionar também para o ManyToOne

Criado 14 de março de 2016
Ultima resposta 15 de mar. de 2016
Respostas 4
Participantes 3