TransientObjectException ao dar update

8 respostas
javahibernate
G

Estou com problema para dar update em um objeto com o Hibernate, tenho duas listas no meu model com relação com a mesma classe, quando eu dou set na lista e dou save no objeto funciona normalmente, mas se eu tento dar update não funciona e dar TransientObjectException.

Abaixo a classe que estou utilizando:

@ManyToMany
@JoinTable(name="Operacao_Auditor", joinColumns= {@JoinColumn(name="Operacao_Id", referencedColumnName="Id")},
				    inverseJoinColumns={@JoinColumn(name="Representantes_Id", referencedColumnName="Id")})
private List<Representantes> auditor;

@ManyToMany
@JoinTable(name="Operacao_Supervisor", joinColumns= {@JoinColumn(name="Operacao_Id", referencedColumnName="Id")},
				       inverseJoinColumns={@JoinColumn(name="Representantes_Id", referencedColumnName="Id")})
private List<Representantes> supervisor;

8 Respostas

raphaeloneves

Antes de fazer o update vc precisa deixar a entidade no estado de “managed”. Para isso, dê um find na entidade antes de persisti-la.

G

Já tentei fazer isso e continua dando o mesmo erro, não permite nem eu colocar uma lista vazia no lugar, nem nula.

raphaeloneves

Está gerenciando a transação na mão? Posta a entidade completa e o DAO.

G

Entidade:

@Entity
public class Operacao implements Serializable {

@Id
@GeneratedValue
@GridColumn(label = "Id", position = 0, type = GridColumnTypes.LONG, value = "id")
private Long id;
@NotNull
@GridColumn(label = "Nome", position = 1, type = GridColumnTypes.STRING, value = "nome")
private String nome;
@GridColumn(label = "Gestor", position = 2, type = GridColumnTypes.STRING, value = "gestor")
@ManyToOne
private Representantes gestor;
@GridColumn(label = "MapInfo", position = 3, type = GridColumnTypes.BOOLEAN, value = "mapInfo")
private boolean mapInfo;
@GridColumn(label = "TourSolver", position = 4, type = GridColumnTypes.TOURSOLVER, value = "tourSolver")
private boolean tourSolver;
@GridColumn(label = "Os Planejada", position = 5, type = GridColumnTypes.PROGRESSBAR, value = "osPlanejada")
private Integer osPlanejada;
@GridColumn(label = "Os Executada", position = 6, type = GridColumnTypes.PROGRESSBAR, value = "osExecutada")
private Integer osExecutada;
@GridColumn(label = "Auditoria", position = 7, type = GridColumnTypes.PROGRESSBAR, value = "auditoria")
private Integer auditoria;
//informações gerais
private String observacao;
private Boolean tipo;
@ManyToMany
@JoinTable(name="Operacao_Auditor", joinColumns= {@JoinColumn(name="Operacao_Id", referencedColumnName="Id")},
									inverseJoinColumns={@JoinColumn(name="Representantes_Id", referencedColumnName="Id")})
private List<Representantes> auditor;
@ManyToMany
@JoinTable(name="Operacao_Supervisor", joinColumns= {@JoinColumn(name="Operacao_Id", referencedColumnName="Id")},
									inverseJoinColumns={@JoinColumn(name="Representantes_Id", referencedColumnName="Id")})
private List<Representantes> supervisor;
@NotNull
private Integer amostragem;

//Filtro
@ManyToOne
private Cliente cliente;
@ManyToOne
private ClienteProjeto clienteProjeto;
//Getters e Setters

Dao:

public void update(T t) {
    session.update(t);
    session.flush();
    session.clear();
}
staroski

Tem certeza de que é o session.update que você precisa usar?
O session.save ou session.saveOrUpdate não atende sua necessidade?
Exemplos de cada um aqui.

G

Cara eu preciso dar update sim, porque eu já tenho o registro na base de dados, e preciso atualizar ele só.

Eu testei dar saveOrUpdate e não funcionou também.

C

tenta session.merge(t);

G

Também já tentei e nada, estou pensando em criar uma tabela de relação na mão. Para ver se resolve este problema. Mas não queria ter que fazer isso.

Criado 25 de julho de 2017
Ultima resposta 25 de jul. de 2017
Respostas 8
Participantes 4