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 
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