HibernateException: identifier of an instance of (class) was altered from (id1) to (id2)

Olá pessoal. Estou fazendo uns testes de performance com o Hibernate utilizando o JunitPerf. Na hora mando simular uns 5 usuário fazendo insert ao mesmo tempo tenho o seguinte erro: [color=darkblue]org.hibernate.HibernateException: identifier of an instance of hibernate.entity.Page was altered from 55805 to 55809[/color].
Isso só acontece quando simulo mais de um usario chamando o metodo add ao mesmo tempo. Já dei uma pesquisada na net e vi que algo relacionado ao contexto do hibernate, ao estado do objeto, parece que depois de persistido o primeiro o hibernate considero os outro como sendo o mesmo objeto que já foi persistido no banco. Não manjo muito de hibernate :roll:

PageDAO

[code]package hibernate.dao;

// Generated 04/09/2011 15:57:05 by Hibernate Tools 3.4.0.CR1

import hibernate.entity.Page;

import java.util.List;

import javax.naming.InitialContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Example;

/**

  • Home object for domain model class Page.

  • @see hibernate.entity.Page

  • @author Hibernate Tools
    */
    public class PageDAO extends GenericDAO{

    private static final Log log = LogFactory.getLog(PageDAO.class);

    private Session session;

    public PageDAO(Session session){
    this.session = session;
    }

    public PageDAO()
    {
    this.session = getSession();
    }

    public void add(Page transientInstance) {
    log.debug(“persisting Page instance”);
    Session s = getSession();
    try {
    s.persist(transientInstance);
    s.getTransaction().commit();
    } catch (HibernateException e) {
    s.getTransaction().rollback();
    e.printStackTrace();
    } finally {
    if(session != null && session.isOpen())
    s.close();
    }
    }[/code]

PageTest(Junit)

[code]package hibernate.test;

import hibernate.dao.PageDAO;
import hibernate.entity.Page;
import junit.framework.TestCase;

import org.junit.Before;
import org.junit.Test;

public class PageTest extends TestCase {

private Page page;
private PageDAO pageDao;

@Before
protected void setUp() {
	
	page = new Page();
	pageDao = new PageDAO();
	page.setPageTitle("Test937");
	byte[] s = new byte[3];
	page.setPageRestrictions(s);
    page.setPageCounter(1 + (int)(Math.random() * 100));
	page.setPageIsRedirect((byte) 1);
	page.setPageIsNew((byte) 1);
	page.setPageRandom(12);
	byte[] f = new byte[2];
	page.setPageTouched(f);
	page.setRevisions(null);
	page.setPageLatest(1);
	page.setPageLen(3);	
	

}

public PageTest(String testName) {

	super(testName);

}

@Test
public void testInsertPage() {

	
	long tempoInicial = System.currentTimeMillis();
	pageDao.add(page);
	long tempoFinal = System.currentTimeMillis();
	System.out
			.println(tempoFinal
					- tempoInicial
					+ "--------------------------------------------------------------------------------");
}

}
[/code]

loadPage(JunitPerf)

[code]package hibernate.testperf;

import com.clarkware.junitperf.LoadTest;

import hibernate.test.PageTest;
import junit.framework.Test;
import junit.framework.TestCase;

public class loadPage{

public static Test save(){
	
	int user = 5;
	int interacoes = 1;
	Test testCase = new PageTest("testInsertPage");
	Test loadTest = new LoadTest(testCase,user,interacoes);
	return loadTest;
}

 public static void main(String args[]) {
        junit.textui.TestRunner.run(save());
}

}
[/code]

Page.hbm.xml

[code]<?xml version="1.0"?>

[/code]

Resolvido. Problema, por causa da concorrência, eu não poderia usar variaveis que estão fora dos métodos na classe PageTest. Só coloquei elas,page e pageDAO, dentro do método e funcionou.