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
]