Credo che il problema sia dovuto al fatto che la data base, ovvero la minima data rappresentabile da un oggetto java.sql.Date è 1 gennaio 1970, che tradotto equivale a '1970-01-01'. Una data come quella restituita dal DB ('0000-00-00') non è rappresentabile tramite l'oggetto java.sql.Date.

Lo si può logicamente desumere dal fatto che il costruttore dell'oggetto Date prende come parametro un valore che rappresenta il numero di millisecondi trascorsi da quella data (data base). La data '0000-00-00' dovrebbe essere rappresentata tramite un valore negativo, ma tutti i valori negativi passati al costruttore vengono "ignorati" e viene imposto lo 0.

java.sql.Date
A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL DATE value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT.
Ciao.