Problema com Hibernate e Enum

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…

:smiley:

Amigo pq vc usa esse ENUM? nunca usei isso, pq naum monta de outra forma? post suas tabelas do BD pra v…

Então amigo…
as tabelas estão certas e testadas ( ou seja, funcionando perfeitamente )

A questão do "fazer de outra forma"
Já testei outras formas de inserir esses dados na tabela como por exemplo
criar constantes:

public static final int HOMEM = 1;
public static Final int MULHER = 2;

e depois apenas inserir e deu certo!

Mas infelismente no projeto que estou trabalhando preciso seguir esse padrão de ENUMS

Quando inseridos tipos enums através de notações hibernate, no caso de
Strings utiliza-se o Enumeration(EnumType.STRING)
existe algo equivalente para quando o valor é inteiro?

Pesquisando pela internet já vi que existe uma forma utilizando o @type em conjunto com o @parameters para isto,
mas gostaria de saber se existe uma forma mais facil de fazer isso utilizando ENUMS

ninguém? :cry: