NonUniqueObjectException

4 respostas
adrianostanley

Tenho uma classe chamada Team e outra chamada Game.
A classe Game tem dois objetos de Team, sendo que quando tento gravar um Game no BD, buscando os dois times pelo id, recebo uma NonUniqueObjectException. Alguém sabe se é necessário alterar algo no mapeamento das classes para resolver isso? Ou o problema está no tratamento dos objetos no momento da busca seguida de gravação?
Obrigado,
Adriano

4 Respostas

nbluis

O problema deve estar no seu mapeamento não ?

adrianostanley
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="br.com.bolao.beans.BeanGame" table="game">
		<id name="id" column="idgame" type="java.lang.Integer">
			<generator class="increment" />
		</id>
		<property name="homeTeamScore" type="java.lang.Integer" />
		<property name="visitorTeamScore" type="java.lang.Integer" />
		<many-to-one name="homeTeam" class="br.com.bolao.beans.BeanTeam" column="id_hometeam" cascade="all" />
		<many-to-one name="visitorTeam" class="br.com.bolao.beans.BeanTeam" column="id_visitorteam" cascade="all" />		
		<property name="gameDay" type="java.util.Date" />
	</class>
	
	<class name="br.com.bolao.beans.BeanTeam" table="team">
		<id name="id" column="idteam" type="java.lang.Integer">
			<generator class="increment" />
		</id>
		<property name="name" type="java.lang.String" />
	</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="br.com.bolao.beans.BeanTeam" table="team">
		<id name="id" column="idteam" type="java.lang.Integer">
			<generator class="increment" />
		</id>
		<property name="name" type="java.lang.String" />
	</class>
</hibernate-mapping>
alberto_ribeiro

Dê uma olhada nesse link aqui do guj mesmo:

http://www.guj.com.br/posts/list/35969.java

[]'s

adrianostanley

Pois é… acabei resolvendo da seguinte maneira…

Eu tinha uma classe com uma lista (java.util.List) na camada de controle que mantinha todos os registros de Team armazenados (como uma cache).

Ou seja, ele conflitava no momento da gravação pq provavelmente o Hibernate fazia uma busca pelo ID do Team pra inserir o Game, ao mesmo tempo que a lista mantinha instâncias com o ID de cada Team.

Pra evitar esse conflito, toda vez que uma transação for efetuada, antes eu anulo todos os itens presentes na lista. É uma gambiarra, claro… mas não encontrei uma solução melhor.

Abraços e obrigado pela ajuda…

Criado 21 de janeiro de 2008
Ultima resposta 22 de jan. de 2008
Respostas 4
Participantes 3