Oracle
 sql >> Database >  >> RDS >> Oracle

saveOrUpdate di Hibernate ignora la proprietà della colonna non nulla

È un comportamento assolutamente corretto.

Il not-null attributo ha due significati:

  • supporta gli strumenti di esportazione degli schemi
  • controlla l'entità in runtime (cioè non controlla l'impostazione della colonna del database)

Vedere:5.1. Dichiarazione di mappatura , estrarre:

E 5.1.11. Proprietà , estrarre:

Quindi, se i tuoi client eseguono del codice, che prova:

getHibernateTemplate().saveOrUpdate(myEntity);

mentre myEntity mancano alcune proprietà impostate come not-null="true" è corretto lanciare un'eccezione di runtime. Mentre sei nel tuo ambiente di test, molto probabilmente imposti sempre la proprietà su alcuni valore non nullo.

E c'è anche un vantaggio. Il DB e l'app sono accoppiati in modo lasco. Quindi, se necessario, puoi apportare più vincoli lato App, senza toccare il DB (es. non sei autorizzato)