По-идее attributes() по умолчанию возвращает как раз все нестатические публичные поля, но его поведение можно и переопределить.
Проблема
В базу почемуто пишутся только те значения из attributes, которых нет как публичных полей.
Возможные решения
Собственно решение