Oie … Estou programando a pouco tempo e aqui quebrando a cabeça para alterar a minha anotação que altere o meu banco, porém nada que eu faço altera.
No banco, os meus campo onUpdate e onDelete só ficam como RESTRICT então preciso de ajuda!
Vou detalhar mais…
Preciso fazer com que a minha anotação fique igual a essa
CREATE TABLE `tb_distrito` (
`id_distrito` CHAR(32) NOT NULL,
`no_distrito` VARCHAR(50) NOT NULL,
`co_mec` INT(10) NULL DEFAULT NULL,
`id_pais` INT(10) NOT NULL,
`id_uf` INT(10) NULL DEFAULT NULL,
`id_cidade` INT(10) NULL DEFAULT NULL,
PRIMARY KEY (`id_distrito`),
INDEX `FK1_distrito` (`id_pais`),
INDEX `FK2_distrito` (`id_uf`),
INDEX `FK3_distrito` (`id_cidade`),
CONSTRAINT `FK1_distrito` FOREIGN KEY (`id_pais`) REFERENCES `tbd_pais` (`id_pais`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `FK2_distrito` FOREIGN KEY (`id_uf`) REFERENCES `tbd_uf` (`id_uf`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `FK3_distrito` FOREIGN KEY (`id_cidade`) REFERENCES `tbd_cidade` (`id_cidade`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
Meu código Java
....
@Entity
@Table(name="tb_distrito")
public class Distrito implements Serializable {
private static final long serialVersionUID = 5327030336417805790L;
private String id;
private String nome;
private Integer codigoMEC;
private Pais pais;
private Estado estado;
private Cidade cidade;
@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy="uuid")
@Column(name="id_distrito",columnDefinition="CHAR(32)" , length=32, nullable=false)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="no_distrito", length=50, nullable=false)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name="co_mec", columnDefinition="INT(10)", length=10)
public Integer getCodigoMEC() {
return codigoMEC;
}
public void setCodigoMEC(Integer codigoMEC) {
this.codigoMEC = codigoMEC;
}
//@OneToMany(cascade=CascadeType.ALL)
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch=FetchType.LAZY, optional= false)
@JoinColumn(name="id_pais", columnDefinition="INT(10)")
public Pais getPais() {
return pais;
}
public void setPais(Pais pais) {
this.pais = pais;
}
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch=FetchType.LAZY)
@JoinColumn(name="id_uf",columnDefinition="INT(10)")
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch=FetchType.LAZY)
@JoinColumn(name="id_cidade",columnDefinition="INT(10)")
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
}
E este código está gerando a tabela no meu banco assim:
CREATE TABLE `tb_distrito` (
`id_distrito` CHAR(32) NOT NULL,
`co_mec` INT(10) NULL DEFAULT NULL,
`no_distrito` VARCHAR(50) NOT NULL,
`id_cidade` INT(10) NULL DEFAULT NULL,
`id_uf` INT(10) NULL DEFAULT NULL,
`id_pais` INT(10) NOT NULL,
PRIMARY KEY (`id_distrito`),
INDEX `FK125CB449A21A3F14` (`id_uf`),
INDEX `FK125CB4494C833365` (`id_cidade`),
INDEX `FK125CB449EA47EE13` (`id_pais`),
CONSTRAINT `FK125CB449EA47EE13` FOREIGN KEY (`id_pais`) REFERENCES `tbd_pais` (`id_pais`),
CONSTRAINT `FK125CB4494C833365` FOREIGN KEY (`id_cidade`) REFERENCES `tbd_cidade` (`id_cidade`),
CONSTRAINT `FK125CB449A21A3F14` FOREIGN KEY (`id_uf`) REFERENCES `tbd_uf` (`id_uf`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
Podem reparar que CONSTRAINTS tem nome diferentes e que as opções ON UPDATE NO ACTION ON DELETE NO ACTION não aparecem… :shock:
Agradeço desde já!
[]s…