Pessoal, to ficando maluco aqui já, meu problema é o seguinte: conforme esse tópico que eu abri (http://guj.com.br/posts/list/197498.java),
quando o usuário clicar editar, na verdade não quero editar e sim salvar um novo registro.
Não é uma questão de histórico, pra isso eu já uso o Hibernate Envers, e sim uma necessidade do sistema.
Já nem sei o que to fazendo de errado: se são os métodos equals() ou clone() que estão implementados de maneira errada, não sei se é o gerenciamento das transações (como uso JTA é automático) ou se eu não estou sabendo manipular os objetos, o fato é que isso:pointConfig.setActive(false);
//entityManager.flush();
entityManager.merge(pointConfig);
entityManager.clear();
pointConfig.setPointConfigId(null);
pointConfigEdit = (PointConfig) pointConfig.clone();
entityManager.clear();
if(pointConfig == pointConfigEdit) {
System.out.println("iguais");
} else {
System.out.println("diferentes"); <==== ** E são diferentes mesmo!! **
}
pointConfigEdit.setActive(true);
entityManager.flush();
entityManager.persist(pointConfigEdit);
Outra coisa, se eu descomentar a linha 02, ele seta como false só que outros campos como formula, caso seja mudado, acaba atualizando!!!
Segue meu código:ENTIDADE
public class PointConfig implements Serializable, Cloneable {
private Integer pointConfigId;
private Point point;
private String formula;
private boolean active;
// Construtor, Get's e Set's
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((getPointConfigId() == null) ? 0 : getPointConfigId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof PointConfig))
return false;
PointConfig other = (PointConfig) obj;
if (getPointConfigId() == null) {
if (other.getPointConfigId() != null)
return false;
} else if (!getPointConfigId().equals(other.getPointConfigId()))
return false;
return true;
}
@Override
public Object clone() throws CloneNotSupportedException {
try {
return super.clone();
} catch (CloneNotSupportedException x) {
throw new InternalError(x.toString());
}
}
}
MB
@Begin(flushMode = FlushModeType.MANUAL)
public String editPointConfig() {
if(pointConfig.getPointConfigId() != null) {
entityManager.refresh(pointConfig);
}
return "editPointConfig";
}
@End
public String savePointConfig() throws CloneNotSupportedException {
if (pointConfig.getPointConfigId() != null) {
pointConfig.setActive(false);
//entityManager.flush();
entityManager.merge(pointConfig);
entityManager.clear();
pointConfig.setPointConfigId(null);
pointConfigEdit = (PointConfig) pointConfig.clone();
entityManager.clear();
if(pointConfig == pointConfigEdit) {
System.out.println("IGUAIS");
} else {
System.out.println("DIFERENTES");
}
pointConfigEdit.setActive(true);
entityManager.flush();
entityManager.persist(pointConfigEdit);
}
listPoints();
return "savePointConfig";
}
Abraços!!!