Problema com Hibernate

7 respostas
pauloperes

Ola a todos,

Tenho um sistema que recupera de uma base de dados todos os shelves e cadastra em outra, entao eu faco o select e na hora de inserir na minha base de dados eu vejo se ja esta cadastrada, se nao esta cadastro, se nao so atualizo os dados sem atualizar a data de inserção, porem quando vou gravar o hibernate me retorna um erro dizendo que ja existe um registro na base. fiz um teste com a minha base vazia dae nao da o erro, alguem sabe o que pode ser?

veja minhas classes
@Entity
@Table(name = "SHELF")
public class Shelf implements Serializable {

    @Id()
    @Column(name = "IP")
    private String ip;
    @Column(name = "NAME")
    private String name;
    @ManyToOne()
    private City city;
    @ManyToOne
    private ShelfModel shelfModel;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATE_INSERT", nullable = false)
    private Calendar dateInsert;

    public Shelf() {
    }

    public Shelf(String ip) {
        this.ip = ip;
    }

    public City getCity() {
        return city;
    }

    public void setCity(City city) {
        this.city = city;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ShelfModel getShelfModel() {
        return shelfModel;
    }

    public void setShelfModel(ShelfModel shelfModel) {
        this.shelfModel = shelfModel;
    }

    public Calendar getDateInsert() {
        return dateInsert;
    }

    public void setDateInsert(Calendar dateInsert) {
        this.dateInsert = dateInsert;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Shelf other = (Shelf) obj;
        if ((this.ip == null) ? (other.ip != null) : !this.ip.equals(other.ip)) {
            return false;
        }
        return true;
    }

    
}
for (int x = 0; x < shelves.size(); x++) {
            try {
                HibernateCore.beginTransaction();
                if (daoShelf.isShelfExist(shelves.get(x).getIp())) {
                    shelves.get(x).setDateInsert(null);
                    daoShelf.getDaoGeneric().update(shelves.get(x));
                } else {
                    shelves.get(x).setDateInsert(Calendar.getInstance());
                    daoShelf.getDaoGeneric().save(shelves.get(x));
                }
                HibernateCore.commitTransaction();
            } catch (DaoException ex) {
                Logger.getLogger(Inventory.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
br.com.gvt.seaccess.dao.exception.DaoException: a different object with the same identifier value was already associated with the session: [br.com.gvt.seaccess.model.Shelf#10.131.3.3]
        at br.com.gvt.seaccess.dao.Dao.update(Dao.java:77)
        at br.com.gvt.seaccess.shelfinventory.inventory.Inventory.makeInventory(Inventory.java:77)
        at shelfinventory.Main.main(Main.java:21)
Mar 30, 2010 11:22:18 AM br.com.gvt.seaccess.shelfinventory.inventory.Inventory makeInventory

7 Respostas

M

se você usar o saveOrUpdate() do hibernate ja nao resolve o teu problema?

pauloperes

não. ja tentei.

pauloperes

não, visto que o campo data deve ser inserido somente quando nao existir o o shelf cadastrado.

M

Foi isso que vc tentou?

for (int x = 0; x < shelves.size(); x++) { try { HibernateCore.beginTransaction(); if (daoShelf.isShelfExist(shelves.get(x).getIp())) { shelves.get(x).setDateInsert(null); } else { shelves.get(x).setDateInsert(Calendar.getInstance()); } daoShelf.getDaoGeneric().saveOrUpdate(shelves.get(x)); HibernateCore.commitTransaction(); } catch (DaoException ex) { Logger.getLogger(Inventory.class.getName()).log(Level.SEVERE, null, ex); } }

pauloperes

N’ao,

tentei agora e deu o mesmo erro

M

ja leu isso? http://www.codeguru.com/forum/showthread.php?t=438291

pauloperes

Veja, o que eu fiz e da o mesmo erro:

for (int x = 0; x < shelves.size(); x++) {
            try {
                if (!daoShelf.isShelfExist(shelves.get(x).getIp())) {
                    shelves.get(x).setDateInsert(Calendar.getInstance());
                }
                HibernateCore.beginTransaction();
                daoShelf.getDaoGeneric().saveOrUpdate(shelves.get(x));
                HibernateCore.getSession().flush();
                HibernateCore.getSession().evict(shelves.get(x));
                HibernateCore.commitTransaction();
            } catch (DaoException ex) {
                Logger.getLogger(Inventory.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
Criado 30 de março de 2010
Ultima resposta 30 de mar. de 2010
Respostas 7
Participantes 2