Criação de Tabelas many-to-many

Bom dia pessoal,

 O meu sistema cria automaticamente as tabelas no meu banco de dados, mas eu possuo uma relação many-to-many no meu hibernate, o qual esta criando a tabela no banco de dados assim:
CREATE TABLE "globalGIP"."dbo"."UsuariosGrupos"
(
   usuario int,
   grupo int,
   CONSTRAINT "globalGIP"."dbo"."UsuariosGrupos"_PK PRIMARY KEY (usuario,grupo)
);

ALTER TABLE UsuariosGrupos
ADD CONSTRAINT FKF8D294AF242E4515
FOREIGN KEY (usuario)
REFERENCES Usuarios(idUsuario) ON DELETE [u][b]NO[/b][/u] ACTION ON UPDATE NO ACTION;
ALTER TABLE UsuariosGrupos
ADD CONSTRAINT FKF8D294AF3890D1CB
FOREIGN KEY (grupo)
REFERENCES Grupos(idGrupo) ON DELETE [b][u]NO[/u][/b] ACTION ON UPDATE NO ACTION;

Mas eu preciso que a minha tabela fosse criada assim:

CREATE TABLE "globalGIP"."dbo"."UsuariosGrupos"
(
   usuario int,
   grupo int,
   CONSTRAINT "globalGIP"."dbo"."UsuariosGrupos"_PK PRIMARY KEY (usuario,grupo)
);

ALTER TABLE UsuariosGrupos
ADD CONSTRAINT FKF8D294AF242E4515
FOREIGN KEY (usuario)
REFERENCES Usuarios(idUsuario) ON DELETE [u][b]Cascade[/b][/u] ACTION ON UPDATE NO ACTION;
ALTER TABLE UsuariosGrupos
ADD CONSTRAINT FKF8D294AF3890D1CB
FOREIGN KEY (grupo)
REFERENCES Grupos(idGrupo) ON DELETE [u][b]Cascade[/b][/u] ACTION ON UPDATE NO ACTION;

Alguem sabe como que eu faço para o hibernate criar essa relação onde o meu DELETE seja CASCADE e não NO??? Pois só consegui fazer isso nos relacionamentos one-to-many

Você tentou declarar CascadeType.DELETE no relacionamento?

Lipe,

Meu relacionamento no hbm esta assim:

<hibernate-mapping package="frw.modelo.seguranca">
    <class name="Usuario" table="Usuarios">

        <id name="idUsuario" type="java.lang.Integer" unsaved-value="0">
            <generator class="increment"/>
        </id>

        <property name="usuario" type="java.lang.String" not-null="true" length="100" unique-key="true"/>
        <property name="senha" type="java.lang.String" not-null="true" length="10"/>
		
        <set name="janela" inverse="true">
            <key column="dono"/>
            <one-to-many class="frw.modelo.janela.Janela"/>
        </set>
        <set name="menu" inverse="true">
            <key column="dono"/>
            <one-to-many class="frw.modelo.janela.Menu"/>
        </set>

      <set name="grupos" table="UsuariosGrupos" inverse="true" cascade="all" lazy="false">
            <key column="usuario"/>
            <many-to-many column="grupo" class="Grupo"/>
        </set>
    </class>
</hibernate-mapping>

e o outro hbm esta assim:

<hibernate-mapping package="frw.modelo.seguranca">
    <class name="Grupo" table="Grupos">

        <id name="idGrupo" type="java.lang.Integer" unsaved-value="0">
            <generator class="increment"/>
        </id>

        <property name="nome" type="java.lang.String" not-null="true" length="50" unique-key="true"/>
        <property name="descricao" type="java.lang.String" not-null="true" length="255"/>

        <set name="janela" inverse="true">
            <key column="grupo"/>
            <one-to-many class="frw.modelo.janela.Janela"/>
        </set>
        <set name="menu" inverse="true">
            <key column="grupo"/>
            <one-to-many class="frw.modelo.janela.Menu"/>
        </set>

        <set name="usuarios" table="UsuariosGrupos" lazy="false"> 
            <key column="grupo"/>
            <many-to-many column="usuario" class="Usuario"/>
        </set>

    </class>
</hibernate-mapping>

Lipe, vc sabe como q eu faço??

Dae pessoal, ninguem se habilita em me dar uma força???

[color=darkblue]Você não precisa criar as tabelas no banco, é só passar um Bean para o Hibernate: [/color]


package br.com.edson.hibernate;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

import br.com.edson.struts.bean.Comentario;

/**
 * @author Edson
 * @data   23/05/2007
 *
 */
public class GeraTabelas {

	/**
	 * Gera as tabelas no banco
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		AnnotationConfiguration conf = new AnnotationConfiguration();
		conf.addAnnotatedClass(SuaTabelaBean.class);

		new SchemaExport(conf).create(true, true);

	}

}

Bom dia,

Metaleiro, mas nas suas classes vc esta usando annotations, pelo o q eu pude perceber, como que eu faço para fazer isso utilizando o meu xml? Nunca utilizei annotation, é mais fácil??? Vc tem algum exemplo de alguma aplicação??

[color=darkblue]Sim, estou usando annotations, eu acho mais simples, mas existem formas de passar isso para o XML também, segue um exemplo simples, que é um Bean para uma página de comentários [/color]

[code]/**
*
*/
package br.com.edson.hibernate;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.*;

/**

  • @author Edson
  • @data 23/05/2007

*/
@Entity
public class Comentario {
@Id
@GeneratedValue
private Long id;
@Column(length=60)
private String nome;
@Column(length=60)
private String email;

private String descricao;

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

}
[/code]

[color=darkblue] Se precisar até onde puder ajudar é só postar que eu tento responder.[/color]

http://www.hibernate.org/43.html

pra usar ManyToMany com Annotations

@Id @GeneratedValue @Column(name="id") public long id; @OneToMany @JoinTable(name="tb_enderecos",joinColumns={@JoinColumn(name="id")}) public Set<Endereco> endereços = new HashSet<Endereco>();

Galera, valeu pela ajuda, mas acabei desistindo por enqto do annotatios, pois já estou com o trabalho atrasado e eu teria que estudar, entender para depois modificar o meu projeto. Mas, depois de entregar o meu projeto, com certeza farei um release e modificarei ele. Mas estou com uma outra dificuldade agora no relacionamento many-to-many, pois tenho uma classe grupo que possui ligação many-to-many com o meu usuário. A configuração no meu xml esta assim
Usuario.hbm.xml

<hibernate-mapping package="modelo.seguranca">
    <class name="Usuario" table="Usuarios">
        <id name="idUsuario" type="java.lang.Integer" unsaved-value="0">
            <generator class="increment"/>
        </id>
      <set name="grupos" table="UsuariosGrupos" lazy="false">
            <key column="usuario"/>
            <many-to-many column="grupo" class="Grupo"/>
        </set>
    </class>

Grupo.hbm.xml

<hibernate-mapping package="modelo.seguranca">
    <class name="Grupo" table="Grupos">
        <id name="idGrupo" type="java.lang.Integer" unsaved-value="0">
            <generator class="increment"/>
        </id>
        <set name="usuarios" table="UsuariosGrupos" inverse="true" cascade="save-update" lazy="false">
            <key column="grupo"/>
            <many-to-many column="usuario" class="Usuario"/>
        </set>
    </class>
</hibernate-mapping>

O meu problema esta no seguinte, depois que eu já incluí um usuário em um grupo, e vou tentar atualizar esse usuário, o hibernate esta deletando o meu relacionamento many-to-many, alguém sabe como resolver isso??? Estou precisando URGENTE…

Bom dia Galera,

Depois que eu colocar esse sistema para rodar, ai sim estarei implementando Annotations e tudo mais. Mas alguém sabe como me ajudar na minha dúvida que eu coloquei acima? Pois toda vez que eu tento atualizar esse usuário, o hibernate esta deletando o meu relacionamento many-to-many, alguém sabe como resolver isso?

Galera, resolvi meu problema acima, era apenas erro no código. Qto ao verdadeiro assunto desse fórum, ainda não sei como fazer sem Annotations