Ajuda hibernate

Pessoal, preciso de uma ajuda no hibernate.

Tenho uma tabela ‘evento’ (EVT_APL_BXCP_NOVO)
tenho outra tabela ‘atributos do evento’ (TIP_ATB)
e mais outra tabela ‘sonda do evento’ (SONDA).

E uma tabela com a fk de cada id das 3 tabelas acima (EVT_APL_BXCP_SONDA).

O problema:

Não sei se estou mapeando isso certo no hibernate, se é nas classes que não estou conseguindo!
Consigo gravar nas 3 tabelas acima. Porém quando tento gravar a quarta (EVT_APL_BXCP_SONDA), consigo inserir apenas 2 ids. aí dá excessão org.hibernate.exception.ConstraintViolationException.

As tabelas:

Evento:

id_evento (pk)


campo1
campo2
campo3
campo4

atributos_do_evento

id_atributo (pk)


campo1
campo2
campo3
campo4

sonda_do_evento

id_sonda (pk)


campo1
campo2
campo3
campo4

tabela conexao

id_evento (fk)
id_atributo (fk)
id_sonda (fk)


a classe eventos

private long idEvento;
	private String siglaSistema;
	private String tipoRecurso;
	private String nomeHardware;
	private Timestamp ocorrenciaEvento;
	private int codigoCriticidade;
	private String textoEventoAdicional;
	private Timestamp recepcaoEvento;
	private Timestamp encerramentoEvento;
	private String codigoIdentificadorVersaoEvento = "CEV#V02";
	
	public long getIdEvento() {
		return idEvento;
	}
	public void setIdEvento(long idEvento) {
		this.idEvento = idEvento;
	}
	public String getSiglaSistema() {
		return siglaSistema;
	}
	public void setSiglaSistema(String siglaSistema) {
		this.siglaSistema = siglaSistema;
	}
	public String getTipoRecurso() {
		return tipoRecurso;
	}
	public void setTipoRecurso(String tipoRecurso) {
		this.tipoRecurso = tipoRecurso;
	}
	public String getNomeHardware() {
		return nomeHardware;
	}
	public void setNomeHardware(String nomeHardware) {
		this.nomeHardware = nomeHardware;
	}
	public Timestamp getOcorrenciaEvento() {
		return ocorrenciaEvento;
	}
	public void setOcorrenciaEvento(Timestamp ocorrenciaEvento) {
		this.ocorrenciaEvento = ocorrenciaEvento;
	}
	public int getCodigoCriticidade() {
		return codigoCriticidade;
	}
	public void setCodigoCriticidade(int codigoCriticidade) {
		this.codigoCriticidade = codigoCriticidade;
	}
	public String getTextoEventoAdicional() {
		return textoEventoAdicional;
	}
	public void setTextoEventoAdicional(String textoEventoAdicional) {
		this.textoEventoAdicional = textoEventoAdicional;
	}
	public Timestamp getRecepcaoEvento() {
		return recepcaoEvento;
	}
	public void setRecepcaoEvento(Timestamp recepcaoEvento) {
		this.recepcaoEvento = recepcaoEvento;
	}
	public Timestamp getEncerramentoEvento() {
		return encerramentoEvento;
	}
	public void setEncerramentoEvento(Timestamp encerramentoEvento) {
		this.encerramentoEvento = encerramentoEvento;
	}
	public String getCodigoIdentificadorVersaoEvento() {
		return codigoIdentificadorVersaoEvento;
	}
	
	public void setCodigoIdentificadorVersaoEvento(
			String codigoIdentificadorVersaoEvento) {
		this.codigoIdentificadorVersaoEvento = codigoIdentificadorVersaoEvento;
	}
	
	private Set atributos = new HashSet();

	public Set getAtributos() {
		return atributos;
	}
	public void setAtributos(Set atributos) {
		this.atributos = atributos;
	}
	
	private Set transacao = new HashSet();

	public Set getTransacao() {
		return transacao;
	}
	public void setTransacao(Set transacao) {
		this.transacao = transacao;
	}
	
	private Set sonda = new HashSet();

	public Set getSonda() {
		return sonda;
	}
	public void setSonda(Set sonda) {
		this.sonda = sonda;
	}

o arquivo eventos.hbm.xml

<hibernate-mapping package="sgs.to">
	<class name="Eventos" table="EVT_APL_BXCP_NOVO">
		<id name="idEvento" column="ID_EVT">
			<generator class="native" />
		</id>
		<property name="siglaSistema" column="SG_SIS" />
		<property name="tipoRecurso" column="CD_RCD_TECC" />
		<property name="nomeHardware" column="NM_HW" />
		<property name="ocorrenciaEvento" type="timestamp" column="TS_OCR_EVT" />
		<property name="codigoCriticidade" column="CD_CRTC" />
		<property name="textoEventoAdicional" column="TX_EVT_ADC" />
		<property name="recepcaoEvento" type="timestamp"  column="TS_RECP_EVT" />
		<property name="encerramentoEvento" type="timestamp"  column="TS_ECR_EVT" />
		<property name="codigoIdentificadorVersaoEvento" column="CD_IDFR_VRS_EVT" />
		
		<set name="atributos" table="EVT_APL_BXCP_ATB" inverse="true">
			<key column="ID_EVT" />
			<many-to-many column="ID_ATB" class="TipoAtributo" />
		</set>
		
		<set name="transacao" table="EVT_APL_BXCP_TRAN" inverse="true">
			<key column="ID_EVT" />
			<many-to-many column="ID_TRAN_MVL" class="TransacaoMobile" />
		</set>
		
		<set name="sonda" table="EVT_APL_BXCP_SONDA" inverse="true">
			<key column="ID_EVT" />
			<many-to-many column="ID_SONDA" class="SondaMobile" />
		</set>
	</class>
</hibernate-mapping>

a classe atributos do evento

public class TipoAtributo {
	
	private long idAtributo;
	private String descricao;
	
	public long getIdAtributo() {
		return idAtributo;
	}
	public void setIdAtributo(long idAtributo) {
		this.idAtributo = idAtributo;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	/* atributos do evento */
	private Set eventos = new HashSet();

	public Set getEventos() {
		return eventos;
	}
	public void setEventos(Set eventos) {
		this.eventos = eventos;
	}
	
	/* atributos da transação mobile */
	private Set transacao = new HashSet();

	public Set getTransacao() {
		return transacao;
	}
	public void setTransacao(Set transacao) {
		this.transacao = transacao;
	}
	
	/* atributos da sonda */
	private Set sonda = new HashSet();

	public Set getSonda() {
		return sonda;
	}
	public void setSonda(Set sonda) {
		this.sonda = sonda;
	}
}

atributos.hbm.xml

<hibernate-mapping package="sgs.to">
	<class name="TipoAtributo" table="TIP_ATB">
		<id name="idAtributo" column="ID_ATB">
			<generator class="native" />
		</id>
		<property name="descricao" column="DCR_ATB" />
		
		<set name="eventos" table="EVT_APL_BXCP_ATB">
			<key column="ID_ATB" />
			<many-to-many column="ID_EVT" class="Eventos" />
		</set>
		
		<set name="transacao" table="EVT_APL_BXCP_TRAN">
			<key column="ID_ATB" />
			<many-to-many column="ID_TRAN_MVL" class="TransacaoMobile" />
		</set>
		
		<set name="sonda" table="EVT_APL_BXCP_SONDA">
			<key column="ID_ATB" />
			<many-to-many column="ID_SONDA" class="SondaMobile" />
		</set>
	</class>
</hibernate-mapping>

classe sonda

public class SondaMobile {
	
	private long idSonda;
	private String descricaoTecnologia;
	private String descricaoOperadora;
	private String ipOrigem;
	
	public long getIdSonda() {
		return idSonda;
	}
	public void setIdSonda(long idSonda) {
		this.idSonda = idSonda;
	}
	public String getDescricaoTecnologia() {
		return descricaoTecnologia;
	}
	public void setDescricaoTecnologia(String descricaoTecnologia) {
		this.descricaoTecnologia = descricaoTecnologia;
	}
	public String getDescricaoOperadora() {
		return descricaoOperadora;
	}
	public void setDescricaoOperadora(String descricaoOperadora) {
		this.descricaoOperadora = descricaoOperadora;
	}
	public String getIpOrigem() {
		return ipOrigem;
	}
	public void setIpOrigem(String ipOrigem) {
		this.ipOrigem = ipOrigem;
	}
	
	/* sonda do evento */
	private Set eventos = new HashSet();

	public Set getEventos() {
		return eventos;
	}
	public void setEventos(Set eventos) {
		this.eventos = eventos;
	}
	
	/* sonda dos atributos */
	private Set atributos = new HashSet();

	public Set getAtributos() {
		return atributos;
	}
	public void setAtributos(Set atributos) {
		this.atributos = atributos;
	}
}

sonda.hbm.xml

<hibernate-mapping package="sgs.to">
	<class name="SondaMobile" table="SONDA">
		<id name="idSonda" column="ID_SONDA">
			<generator class="native" />
		</id>
		<property name="descricaoTecnologia" column="DCR_TECN" />
		<property name="descricaoOperadora" column="DCR_OPRD" />
		<property name="ipOrigem" column="IP_OGM" />
		
		<set name="eventos" table="EVT_APL_BXCP_SONDA">
			<key column="ID_SONDA" />
			<many-to-many column="ID_EVT" class="Eventos" />
		</set>

		<set name="atributos" table="EVT_APL_BXCP_SONDA">
			<key column="ID_SONDA" />
			<many-to-many column="ID_ATB" class="TipoAtributo" />
		</set>
	</class>
</hibernate-mapping>

o arquivo hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
        <property name="hibernate.connection.password">xxxxxx</property>
        <property name="hibernate.connection.url">jdbc:db2://10.22.19.76:50000/D1SGS01</property>
        <property name="hibernate.connection.username">xxx</property>
        <property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
        
        <!-- Habilita gerenciamento de contexto de sessões automático -->
        <property name="current_session_context_class">thread</property>
        
        <!-- Desabilita cache second-level -->
		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
		
        <property name="show_sql">true</property>

        <!-- pool de conexões -->
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">30</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">200</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>

		<property name="hbm2ddl.auto">create</property> 

        <!-- mapeamento das tabelas no banco de dados -->
        <mapping resource="sgs/to/Eventos.hbm.xml"/>
        <mapping resource="sgs/to/TipoAtributo.hbm.xml"/>
        <mapping resource="sgs/to/Sonda.hbm.xml"/>
        <mapping resource="sgs/to/Transacao.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

E agora o erro, quando gravar a última tabela. Essa última tabela se chama (EVT_APL_BXCP_SONDA):

Hibernate: insert into EVT_APL_BXCP_SONDA (ID_SONDA, ID_EVT) values (?, ?)
17:46:11,169  WARN JDBCExceptionReporter:77 - SQL Error: -407, SQLState: 23502
17:46:11,169 ERROR JDBCExceptionReporter:78 - DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2, TABLEID=4, COLNO=2
17:46:11,201 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert collection rows: [sgs.to.SondaMobile.eventos#1]

Observe que na primeira linha o hibernate tenta inserir o id_sonda, id_evt - mas não tenta inserir o id_atb (id do atributo). Por isso dá erro!
Estou geranto as tabelas com o <property name="hbm2ddl.auto">create</property>

Meu problema é no mapeamento ou nas classes. Alguém pode me ajudar?