Думаю, что вам нужен one-to-many на самом деле, т.е. в сущности User хранится список сущностей Achievement. При этом сущность Achievement имеет поля, описывающие конкретное достижение конкретного пользователя (дата получения и другие параметры), а также ссылку на тип достижения (следующий уровень one-to-many). По поводу Set/List - как объявите в классе так и будет, но для сортировки требуется указать order-by в .hbm.xml.
Примерно так:
public class User {
private List<Achievement> achievements;
get...
set...
}
public class Achievement {
private User user;
private Date createDate;
private DicAchievementType type;//справочник типов достижений
get...
set...
}
User.hbm.xml
<bag name="achievements" inverse="true" cascade="all,delete-orphan" order-by="CREATE_DATE">
<key column="user_id"/>
<one-to-many class="Achievement"/>
</bag>
Achievement.hbm.xml
<many-to-one name="user" column="user_id" class="User"/>
<many-to-one name="type" column="achievement_type_id" class="DicAchievementType"/>