Ajuda Hibernate Muitos para Muitos

Pessoal,
Nao estou conseguindo fazer uma associacao muitos pra muitos atualizar na tabela diretamente.
Tenho o objeto cliente que tem varios locais e quando adiciono um local a ele o Hibernate apenas adiciona na tabela do local e nao na tabela de associacao local_cliente. Nao estranhem que tem alguns caracteres esquisitos no nome, isso funciona ok.
???
Alguem jah teve esse problema.
Muito obrigado pela ajuda…

Meu código e os mapeamentos…


<hibernate-mapping>
    <class name="br.com.sensorweb.novo.Cliente" table="&quot;Cliente&quot;" dynamic-update="true"
           dynamic-insert="true" select-before-update="false">
        <id column="id" name="id" type="integer">
            <generator class="native">
                <param name="sequence">"Cliente_id_seq"</param>
            </generator>
        </id>
        <property column="email" name="email" not-null="true" type="string"/>
        <property column="&quot;desc&quot;" name="desc" type="string"/>
        <property column="&quot;razaoSocial&quot;" name="razaoSocial" not-null="true" type="string"/>
        <property column="&quot;nomeFantasia&quot;" name="nomeFantasia" not-null="true" type="string"/>
        <property column="ativo" name="ativo" not-null="false" type="boolean"/>
        <property column="&quot;pessoaJuridica&quot;" name="pessoaJuridica" not-null="true" type="boolean"/>
        <property column="&quot;baseCliente&quot;" name="baseCliente" not-null="true" type="string"/>
        <set cascade="all" inverse="true" lazy="true"  name="locais" table="&quot;Cliente_Local&quot;">
            <key column="&quot;idCliente&quot;"/>
            <many-to-many class="br.com.sensorweb.novo.Local" column="&quot;idLocal&quot;"/>
        </set>
        <set cascade="all" inverse="true" lazy="true"  name="planos" table="&quot;Cliente_Plano&quot;">
            <key column="&quot;idCliente&quot;"/>
            <many-to-many class="br.com.sensorweb.novo.Plano" column="&quot;idPlano&quot;"/>
        </set>
    </class>
</hibernate-mapping>


public class Cliente implements Serializable {

    private int id;
    private String email;
    private String desc;
    private String razaoSocial;
    private String nomeFantasia;
    private boolean ativo;
    private boolean pessoaJuridica;
    private String baseCliente;
    private Collection<Local> locais = new HashSet<Local>();
    private Collection<Plano> planos = new HashSet<Plano>();

    public Collection<Plano> getPlanos() {
        return planos;
    }

    public void setPlanos(Collection<Plano> planos) {
        this.planos = planos;
    }










public class Local implements Serializable {

    private int id;
    private String desc;
    private String celular;
    private String fax;
    private String telefone;
    private String complemento;
    private String logradouro;
    private int numero;
    private String cep;
    private String bairro;
    private boolean padrao;
    private Collection<Cliente> clientes = new HashSet<Cliente>();







<hibernate-mapping>
    <class name="br.com.sensorweb.novo.Local" table="&quot;Local&quot;" dynamic-update="true"
           dynamic-insert="true" select-before-update="false">
        <id column="id" name="id" type="integer">
            <generator class="native">
                <param name="sequence">"Local_id_seq"</param>
            </generator>
        </id>
        <property column="&quot;desc&quot;" name="desc" not-null="true" type="string"/>
        <property column="celular" length="10" name="celular" type="string"/>
        <property column="fax" length="10" name="fax" type="string"/>
        <property column="telefone" length="10" name="telefone" type="string"/>
        <property column="complemento" name="complemento" type="string"/>
        <property column="logradouro" name="logradouro" type="string"/>
        <property column="numero" name="numero" type="integer"/>
        <property column="cep" length="8" name="cep" type="string"/>
        <property column="bairro" name="bairro" type="string"/>
        <property column="padrao" name="padrao" type="boolean"/>

        <set cascade="all" lazy="true" inverse="false" name="clientes" table="&quot;Cliente_Local&quot;" >
            <key column="&quot;idLocal&quot;"/>
            <many-to-many class="br.com.sensorweb.novo.Cliente" column="&quot;idCliente&quot;" />
        </set>
    </class>
</hibernate-mapping>









  public static void saveCliente(Cliente cli) {
        Session dbMCASession = HibernateUtil.currentSession();


//        List<Cliente> clientesList = dbMCASession.createCriteria(br.com.sensorweb.novo.Cliente.class).list();

        Transaction tx = null;
        try {
            System.out.println("antes de commit");
            tx = dbMCASession.beginTransaction();

            dbMCASession.saveOrUpdate(cli);
            dbMCASession.flush();


            tx.commit();
            dbMCASession.close();
        } catch (RuntimeException e) {
            if (tx != null && tx.isActive()) {
                try {
                    // Second try catch as the rollback could fail as well
                    tx.rollback();
                } catch (HibernateException e1) {
                    e1.printStackTrace();
                }
                // throw again the first exception
                throw e;
            }
        }
    }



    public static void main(String[] args) {
//        ClienteMB cl = new ClienteMB();
        Cliente cc = (Cliente) HibernateUtil.currentSession().createCriteria(br.com.sensorweb.novo.Cliente.class).add(Expression.eq("id", 40)).uniqueResult();
//        Cliente aa = clientesList.get(clientesList.size());
        Collection<Local> cl = cc.getLocais();
        System.out.println(""+cl.size());
        Local l = new Local("","","","","","",0,"","",false);

        cc.getLocais().add(l);
        for (Local local : cl) {
            System.out.println("" + local.getDesc());
        }
        ClienteDAO.saveCliente(cc);
    }






Voce precisa que o relacionamento seja bidirecional?

De qualquer forma, tente salvar o Local antes de salvar o cliente.

Valeu,
jah tentei isso. mas mesmo assim. o problema eh que o hibernate nem começa a fazer o insert na tabela de associaçao.
Abraços

pára aqui:

Hibernate: select nextval (’“Local_id_seq”’)
Hibernate: insert into “Local” (“desc”, celular, fax, telefone, complemento, logradouro, numero, cep, bairro, padrao, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)