Colocar nome nas constraints geradas DDL

Pessoal , bom dia
Sou iniciante no hibernate e estou precisando resolver um problema. Como faço para “sobrescrever” aquele nome automatico gerado que a geração de esquema no hibernate gera para as constraints ?

Exemplo do meu problema , usando a estrategia joined de herança:

Classe Pai

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class ContatoJoined implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;

        ...

Classe Filha

@Entity
public class ContatoPFJoined extends ContatoJoined {
	
        // Isso não funcionou para resolver o problema
        @ForeignKey(name="FK_ContatoPFJoined")

	private static final long serialVersionUID = 1L;
        ...

No resultado da operação , aparece assim


    ...

    alter table ContatoPFJoined 
        add constraint FK177D6DED88326A77 
        foreign key (id) 
        references ContatoJoined

    ...

Use a anotação @ForeignKey :wink:

Eu tentei isso, na classe filha. Mas não deu certo. Repara no codigo q eu coloquei em relação a classe filha. Msmo assim obg

Não prestei atenção no código. Desculpa. Anota a sua classe filha.

@ForeignKey(name="FK_ContatoPFJoined")  
 public class ContatoPFJoined extends ContatoJoined {  
}

@Entity @ForeignKey(name="FK_ContatoPFJoined") public class ContatoPFJoined extends ContatoJoined {

ThiagoKs, obg mais uma vez pela atenção. Ja tentei isso tb. O eclipse “embarrera” logo de cara. Da a seguinte msg de erro:

The annotation @ForeignKey is disallowed for this location

Vlw cara. Vou continuar pesquisando pra ver se acho alguma coisa. Engraçado é os exemplos que encontrei dizem pra fazer o que vc recomendou da 1a vez e eu ja vinha fazendo; Colocar a anotação @ForeingKey name=“NomeMinhaConstraint”, mas isso simplesmente não funciona.

Msmo assim, valeu a ajuda cara :thumbup:

[quote=fabiogm]@Entity @ForeignKey(name="FK_ContatoPFJoined") public class ContatoPFJoined extends ContatoJoined {

ThiagoKs, obg mais uma vez pela atenção. Ja tentei isso tb. O eclipse “embarrera” logo de cara. Da a seguinte msg de erro:

The annotation @ForeignKey is disallowed for this location

Vlw cara. Vou continuar pesquisando pra ver se acho alguma coisa. Engraçado é os exemplos que encontrei dizem pra fazer o que vc recomendou da 1a vez e eu ja vinha fazendo; Colocar a anotação @ForeingKey name=“NomeMinhaConstraint”, mas isso simplesmente não funciona.

Msmo assim, valeu a ajuda cara :thumbup:
[/quote]

tente no relacionamento e não na calsse

Ola Lavieri .

Na verdade isso é uma questão de curso. O professor pediu que verificássemos como modificar o nome que o hibernate gera automaticamente para as constraints depois que rodamos o gerador de schemas

package br.com.senac.util;

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

public class GeraSchema {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.configure();
		
		new SchemaExport(cfg).create(true, true);
	}

}

Escrevemos as classes (no caso, uma abstrata com os campos comuns e outras duas especificas) e temos que usar a estratégia Joined.

Desculpe a ignorância de newbie no assunto, mas o que voce esta sugerindo é para fazer isso diretamente no banco , não é isso ?

Obg pela atenção.

[quote=fabiogm]Ola Lavieri .

Na verdade isso é uma questão de curso. O professor pediu que verificássemos como modificar o nome que o hibernate gera automaticamente para as constraints depois que rodamos o gerador de schemas

package br.com.senac.util;

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

public class GeraSchema {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.configure();
		
		new SchemaExport(cfg).create(true, true);
	}

}

Escrevemos as classes (no caso, uma abstrata com os campos comuns e outras duas especificas) e temos que usar a estratégia Joined.

Desculpe a ignorância de newbie no assunto, mas o que voce esta sugerindo é para fazer isso diretamente no banco , não é isso ?

Obg pela atenção.
[/quote]

eu que entendi errado, achei q vc estivesse falando de relacionamentos do tipo 1-N ou N-1 ou 1-1, de composição e não de herença, então estava falando pra anotar na compição…

bom … vc tem q colocar a anotação da SUBClasse e ela funciona sim

rodei esse teste aqui e funcionou

[code]@Entity
@DiscriminatorValue(“1”)
@PrimaryKeyJoinColumn
@ForeignKey(name=“MestreSub”)
public class MeuSubTeste extends MeuTeste {
private String propriedade;

public String getPropriedade() {
	return propriedade;
}

public void setPropriedade(String propriedade) {
	this.propriedade = propriedade;
}

}
[/code]

Tentei aqui, mas o eclipse diz q não é permitido colocar a anotação @ForeingKey antes do nome da classe.

Rodou o seu ai direto ? Ja tinha visto alguns exemplos desse jeito , mas parei nessa do eclipse não permitir a anotação la em cima

Msmo assim vlw

[quote=fabiogm]Tentei aqui, mas o eclipse diz q não é permitido colocar a anotação @ForeingKey antes do nome da classe.

Rodou o seu ai direto ? Ja tinha visto alguns exemplos desse jeito , mas parei nessa do eclipse não permitir a anotação la em cima

Msmo assim vlw
[/quote]
rodou

talvez vc esteja importando a notação errada

org.hibernate.annotations.ForeignKey

[quote=Lavieri][quote=fabiogm]Tentei aqui, mas o eclipse diz q não é permitido colocar a anotação @ForeingKey antes do nome da classe.

Rodou o seu ai direto ? Ja tinha visto alguns exemplos desse jeito , mas parei nessa do eclipse não permitir a anotação la em cima

Msmo assim vlw
[/quote]
rodou

talvez vc esteja importando a notação errada

org.hibernate.annotations.ForeignKey[/quote]

É essa mesmo que estou usando. É com essa que você testou ?

sim … talvez vc esteja com alguma versao antiga, que esteja com problemas