Olá pessoal,
Estou com o seguinte problema:
Tenho as tabelas:
Funcionario
DRT<<PK>>
Nome
…
RO
IDRO<<PK>>
DRT<<FK>>
Data
…
Testemunha
DRT<<PK>><<FK>>
IDRO<<PK>><<FK>>
Classe Funcionario
 @Entity
 @Table(name="funcionario")
 public class Funcionario implements java.io.Serializable {
     
     
      @Id
     @Column(name="drt_funcionario", unique = true, nullable = false)
     private int drt;
     private String nome;
     private String senha;
     
    //Metodos Get e Set
 
  }   Classe RO
 @Entity
 @Table(name="ro")
 public class Ro implements java.io.Serializable {
     @Id
     @Column(name="idro", unique = true, nullable = false)
     @GeneratedValue(strategy=GenerationType.IDENTITY)
     private int idro;
     private String tipo;
     private String unidade;
     @Column(name="local")
     private String localRo;
     @Temporal(value = TemporalType.DATE)
     @Column(name="data")
     private Date dataRo;
     private String horario;
     private String envolvido;
     @Column(name="tipoenvolvido")
     private String tipoEnvolvido;
     private String relato;
     private String providencia;
     @Column(name="assist_medica")
     private String assistenciaMedica;
     private boolean afastamento;
     @Column(name="atendido_por")
     private String atendidoPor;
     @Column(name="local_atend")
     private String localAtendimento;
     private String lesao;
     private String observacao;
     private String efeito;
     
     @ManyToOne
     @JoinColumn(name="drt_funcionario", nullable = false)
     private Funcionario funcionario;
 
         @ManyToMany(
     targetEntity=classes.Funcionario.class)
             //cascade=CascadeType.ALL
     
     @JoinTable(name="testemunha",
         joinColumns=@JoinColumn(name="idro"),
         inverseJoinColumns=@JoinColumn(name="drt_funcionario"))
     private Collection funcionarios = new ArrayList();
 
//Metodos Get and Set
}Classe Hibernate Teste
 public class HibernateTeste {
     
          
             
             //Povoando o objeto funcionario
             Funcionario funcionario = new Funcionario();
             funcionario.setDrt(5);
             funcionario.setNome("teste");
             funcionario.setSenha("teste");
             
             //Adicionando o objeto funcionario na Collection
             Collection funcionarios = new ArrayList();
             funcionarios.add(funcionario);
             
             //Povoando o objeto ro
             Ro ro = new Ro();
             ro.setUnidade("Teste");
             ro.setDataRo(data);
             ro.setFuncionario(funcionario);
             
             //Povoando outro objeto funcionario
             funcionario.setDrt(6);
             funcionario.setNome("teste2");
 
             //adicionando objeto funcionario na Collection
             funcionarios.add(funcionario);
 
            //Setando a collection de funcionarios no objeto RO
             ro.setFuncionarios(funcionarios);
           
             Session session = HibernateUtil.getSession();
             session.beginTransaction();
             session.save(ro);
             session.getTransaction().commit();
 
             
         } catch (HibernateException e) {
             e.printStackTrace();
         }
     }
 }O problema é que quando eu tento persistir o objeto RO que tem a collection de funcionários e deveria persistir no banco na tabela Testemunha, ele dá um erro como se tentasse gravar 2 vezes a mesma combinação de PK e FK. Só funciona se eu setar apenas um funcionário na collection. O que estou fazendo errado?
O seguinte erro é exibido no NetBeans
Hibernate: select funcionari_.drt_funcionario, funcionari_.nome as nome0_, funcionari_.senha as senha0_ from funcionario funcionari_ where funcionari_.drt_funcionario=?
 Hibernate: insert into ro (tipo, unidade, local, data, horario, envolvido, tipoenvolvido, relato, providencia, assist_medica, afastamento, atendido_por, local_atend, lesao, observacao, efeito, drt_funcionario) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into testemunha (idro, drt_funcionario) values (?, ?)
 Hibernate: insert into testemunha (idro, drt_funcionario) values (?, ?)
 org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
         at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
         at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
         at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
         at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
         at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
         at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
         at teste.HibernateTeste.main(HibernateTeste.java:94)
 Caused by: java.sql.BatchUpdateException: Duplicate entry '23-6' for key 1
         at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:652)
         at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
         at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
         ... 8 more