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;
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.
Já tentei fazer isso e continua dando o mesmo erro, não permite nem eu colocar uma lista vazia no lugar, nem nula.
Está gerenciando a transação na mão? Posta a entidade completa e o DAO.
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();
}
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.
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.
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.