I was trying to figured out how to solve this issue. Basically I’m saving a user profile bean that contains multiple occurrences of other beans inside him. Something like date:
public class UserProfile { List<Class1> classes1; List<Class2> classes2; Integer int1; Map<String, Class3> classes3; } |
I was working fine until I changed a getter adding some business functionalities and surrounding all lines with a try / catch. Of course, I putted the exception message on the log using adding this definition inside the bean:
protected final Log logger = LogFactory.getLog(getClass()); |
Good point for me, everything worked fine until I updated the object in Mongo. Holy crap, I got the “Cannot use a complex object as a key value” exception and I spent two hours trying to change the beans (of course I did a lot of other changes after the fatal adding of business logic inside my bean). Exhausted, I contacted my colleague Max (@maxfarnea) and he told me, “when I got this error, I removed the log inside a bean”. Ipso facto, I removed the log entry from my bean, added a throws exception instead of a try / catch and tested! Well done @maxfarnea, it works!
I learned two lesson today: one, don’t put log into beans that need to be stored using spring-data and, two, if you are in pain, ask, talk, don’t be silly, don’t waste your time!!! Stackoverflow.com is a good point to start (and my blog either, of course) but never is more helpful than a quick chat with a colleague!
I value the blog post. Fantastic.
The logger you declare shouldn’t be considered a persistent property in the first place. You can achieve this by either making it a constant (thus: static) or simply exclude from being persisted it using the @Transient annotation.
Thanks for the suggestion! I’ll try it!