Olá pessoal!
Gostaria de saber como faço para mapear uma coluna no hbm.xml de modo que ao deletar não solicite campos not-null?
Abraços e obrigado!
Olá pessoal!
Gostaria de saber como faço para mapear uma coluna no hbm.xml de modo que ao deletar não solicite campos not-null?
Abraços e obrigado!
Por favor,
Explique melhor seu problema …
Campos not-null são obrigatórios na inserção … ao deletar, o hibernate parte do princípio que o bd está íntegro, simplesmente deleta. :shock:
Schmidt
Concordo, mas quando mapeio uma coluna como not-null=“true” que não seja Pk ou version, o hibernate me obriga a informar algum valor mesmo que seja " " ou 0 para deletar ou atualizar o registro…, ao invés de solicitar apenas os campos version e pk como de costume…
Ps.:Quando não informo todos os campos not-null, estoura uma Exeção dizendo que o objeto transiente não está com os campos not-null preenchidos…
Obrigado,
Tive um caso semelhante onde uma classe A tem um set de fotos. Na classe AFotos, classe para representar as fotos do objeto A fiz com que a referencia pro objeto A fosse not-null (seu caso).
Entretanto, temos um “inconveniente”: para deletar um desses registros filho, o Hibernate o deixa inicialmente órfão, ou seja, ele anula literalmente a referência do objeto pai (A) para posteriomente, o deletar definitivamente no bd e atualizar o set. Como eu tenho a referência como not-null pra esse cara, o HIbernate não consegue deixa-lo órfão, lhe mostrando essa stack de erro.
Resumindo, talvez alguém possa dar uma sugestão mais coerente para esses casos. Eu tive de retirar o not-null para que a delecão funcionasse 100%, fazendo o controle de obrigatoriedade no braco mesmo. :lol:
Flws!
Schmidt
Fiz outro teste, agora informando ao Hibernate todos os campos do registro e antes de deletar ele executou um update… É normal ele executar update antes de deletar???
transaction = session.beginTransaction();
String queryHQL = "select new br.com.shc.database.humano.Humano( humano.pkHumano, humano.nome, humano.dtnasc, humano.sexo, " +
"humano.foto, humano.login, humano.senha, humano.data1oCadastro, humano.timestamp, humano.usuario) " +
"from Humano humano " +
"left join humano.humano mae " +
"where humano.pkHumano in (:idHumano)";
Query query = null;
query = session.createQuery(queryHQL)
.setParameter("idHumano", idHumano);
Humano humanoResp = (Humano) query.uniqueResult();
session.delete(humanoResp);
transaction.commit();
Hibernate:
select
humano0_.PkHumano as col_0_0_,
humano0_.Nome as col_1_0_,
humano0_.DTnasc as col_2_0_,
humano0_.Sexo as col_3_0_,
humano0_.Foto as col_4_0_,
humano0_.Login as col_5_0_,
humano0_.Senha as col_6_0_,
humano0_.Data1oCadastro as col_7_0_,
humano0_.Timestamp as col_8_0_,
humano0_.Usuario as col_9_0_
from
humano humano0_
left outer join
humano humano1_
on humano0_.FkMae=humano1_.PkHumano
where
humano0_.PkHumano in (
?
)
Hibernate:
update
humano
set
Timestamp=?,
FkMae=?,
Nome=?,
DTnasc=?,
Sexo=?,
Foto=?,
Login=?,
Senha=?,
Usuario=?,
Data1oCadastro=?
where
PkHumano=?
and Timestamp=?
Hibernate:
delete
from
humano
where
PkHumano=?
and Timestamp=?
Sim, é normal ele fazer.
Quando eles forem desnecessários (seu caso), use a annotation “updateable=false” no lado One da relação OneToMany.
Flws
Olá,
Mas pelo que da pra notar teu banco nao ta integro neh?
Ou senao pode ser que tu nao ta consultando o registro antes de deletar.
Pra deletar tu precisa fazer o seguinte.
Buscar o registro no banco via Hibernate, load, findBy…, etc
Deletar o objeto.
Se tu simplemente setar o ID em um novo objeto e tentar deletar ele nao vai funcionar mesmo.
]['s