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=""Cliente"" 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=""desc"" name="desc" type="string"/>
<property column=""razaoSocial"" name="razaoSocial" not-null="true" type="string"/>
<property column=""nomeFantasia"" name="nomeFantasia" not-null="true" type="string"/>
<property column="ativo" name="ativo" not-null="false" type="boolean"/>
<property column=""pessoaJuridica"" name="pessoaJuridica" not-null="true" type="boolean"/>
<property column=""baseCliente"" name="baseCliente" not-null="true" type="string"/>
<set cascade="all" inverse="true" lazy="true" name="locais" table=""Cliente_Local"">
<key column=""idCliente""/>
<many-to-many class="br.com.sensorweb.novo.Local" column=""idLocal""/>
</set>
<set cascade="all" inverse="true" lazy="true" name="planos" table=""Cliente_Plano"">
<key column=""idCliente""/>
<many-to-many class="br.com.sensorweb.novo.Plano" column=""idPlano""/>
</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=""Local"" 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=""desc"" 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=""Cliente_Local"" >
<key column=""idLocal""/>
<many-to-many class="br.com.sensorweb.novo.Cliente" column=""idCliente"" />
</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);
}