When searching for cache within NHibernate, I came across that there are two cache levels that can be used, the first level and the second level. I found articles with implementations of both types and everything, but I'd like to know what the real difference is between the two. Why choose one or the other?