Boa tarde a todos,
To com um problema usando o hibernate,
tenho as seguintes classes:
public enum Sexo {
HOMEM(1), MULHER(2);
private int id_sexo;
Sexo(int id){
id_sexo = id;
}
}
@Entity
@Table(name="pessoa")
public class Pessoa {
private int pessoaId;
private String nomePessoa;
private Cidade cidade;
private Sexo sexo;
@Id
@GeneratedValue
@Column(name="pessoa_id")
public int getPessoaId() {
return pessoaId;
}
public void setPessoaId(int pessoaId){
this.pessoaId = pessoaId;
}
//aqui que está dando o erro
@Column(name="PESSOA_SEXO",insertable=true,updatable=true)
public Sexo getSexo() {
return sexo;
}
public void setSexo(Sexo sexo) {
this.sexo = sexo;
}
@Column(name="PESSOA_NOME",length=50,insertable=true, updatable=true)
@Enumerated(EnumType.STRING)
public String getNomePessoa() {
return nomePessoa;
}
public void setNomePessoa(String nomePessoa) {
this.nomePessoa = nomePessoa;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="pessoa_cidade",insertable=true,updatable=true)
@Fetch(FetchMode.JOIN)
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
e no banco, na tabela pessoa existe uma chave estrangeira para o campo sexo que pode ser 1 ou 2
O problema é que ele não consegue converter esse enum definido por HOMEM(1) MULHER(2) para int
na hora de persistir e ele me devolve o seguinte erro:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`regiao`.`pessoa`, CONSTRAINT `pessoa_ibfk_2` FOREIGN KEY (`pessoa_sexo`) REFERENCES `sexo` (`sexo_id`))
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
... 18 more
Alguem sabe alguma forma de eu fazer o hibernate entender que o valor vindo do enum é um inteiro?
obrigado a todos que ajudarem…