Это звучит очень странно. Во-первых, если код работает какое-то время, как вы говорите, файл должен быть там. Во-вторых, JVM редко выгружает класс из памяти после его использования. Некоторые JVM будут делать это в ситуациях с нехваткой памяти или в составе GC, но в качестве оптимизации они обычно останавливаются.
Мое единственное предположение - вы используете JVM в ситуации, когда меняются ClassLoaders. Если вы используете Netbeans (особенно), но я думаю, что также затмение, то, если вы частично перекомпилируете код, загрузчики классов могут не совпадать. Это работает в IDE?
Альтернативой является изменение ClassLoader. Если вы повторно выпустите на работающий веб-сервер или сервер приложений, то у старого класса не будет соответствующего загрузчика классов для нового экземпляра. ClassLoader может не найти старую версию, даже если файл там есть. Вы повторно выпускаете приложение / веб-сервер?
Наконец, я полагаю, что это возможно с сериализацией. Если класс Serializable, и serialVersionUID не совпадают, я думаю, это может произойти. Вы делаете здесь какую-либо сериализацию объектов?