Relacionamento no hibernate

5 respostas
T

Tenho um objeto Animal que tem uma lista de Biometrias. Começo uma transação, adiciono um item na lista, dou um commit e recebo o erro

Data truncation: Column set to default value; NULL supplied to NOT NULL column 'animal_ID' at row 1

Remover também dá a mesma coisa, só alterar funciona. Não entendo porque. Pra mim o Hibernate tomaria conta disso pra mim já que animal_ID é foreign key (mas o primary key é outra coluna, um sequencial).

Ai vai as partes que acho que são relevantes do código:

Animais.java

public class Animais  implements java.io.Serializable {

	private int id;
	...
	private List<Biometrias> biometrias;

	public Animais() {
	}

	public int getId() {
		return this.id;
	}

	public void setId(int id) {
		this.id = id;
	}
	...
	public List<Biometrias> getBiometrias() {
		return this.biometrias;
	}

	public void setBiometrias(List<Biometrias> biometrias) {
		this.biometrias = biometrias;
	}
}

Biometrias.java

public class Biometrias  implements java.io.Serializable {

	@SuppressWarnings("unused")
	private int id;
	...

	public Biometrias() {
	}

	...

}

Animais.hbm.xml

<class name="Animais" table="animais" catalog="cpunb"> <id name="id" type="int"> <column name="ID" /> <generator class="increment" /> </id> ... <bag name="biometrias" inverse="false" cascade="all" lazy="true" fetch="select"> <key> <column name="animal_ID" not-null="true" /> </key> <one-to-many class="Biometrias" /> </bag> </class>

Biometrias.hbm.xml

<class name="Biometrias" table="biometrias" catalog="cpunb">
        <id name="id" type="int" access="field">
        	<column name="ID" />
        	<generator class="increment" />
        </id>
	...
    </class>

O código que execute é

tx = DAOFactory.getDAOFactory().getCurrentSession().beginTransaction();
	this.records = animal.getBiometrias();
	// crio um "biometria" e seto tudo
	records.add(biometria);
	tx.commit();

Outra coisa, tem como eu fazer a mesma coisa (sem o erro, claro) sem deixar uma transação aberta? Abro ela quando mostra a tela e dou commit quando o usuário salva, mas ele pode ficar um bom tempo com a tela aberta sem fazer nada…

Valeu

5 Respostas

Leozin

deu o mesmo erro quando tu usa o list em vez de bag?

T

Também não dá certo Leozin, o mesmo erro. Acho que estou errando alguma propriedade no xml, se é que eu não tenho realmente que setar isso na mão…

Valeu pela responta rápida

marciobarroso

E ae …

Tente alterar suas entities e seus mapeamentos … Mude o type dos id de int para Long ou Integer - Long preferencialmente.

Faça o teste e dê o retorno.

[ :smiley: ]

Leozin

se vc tirar o not null do animal_id dah isso tb?

T

marciobarroso :

Tentei mudar tudo pra long mas deu o erro:

IllegalArgumentException occurred while calling setter of com.linno.cpunb.model.Animais.id

Devo ter que mudar muitas coisas no programa e no banco que não lembrei de mudar. Não acho que seja esse o problema… Tavas pensando em overflow? O meu sequencial tá em torno do número 50…

Leozin:

Se tirar o not_null o erro vem da validação do MySQL, o campo é NOT NULL na minha tabela.

Criado 28 de abril de 2006
Ultima resposta 28 de abr. de 2006
Respostas 5
Participantes 3