È 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)