Bonjour,

Dans ma base de donnée, j’ai 2 tables t_timesheet(id,userid,month,year,date) et t_activity(id,daydate,nbhour,timesheetid,assignementid,activitytypeid).

fichier de mapping:

TTimesheet.hbm.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<set name="TActivities" inverse="true">
	<key column="ID"/>
	<one-to-many class="TActivity"/>
</set>
TActivity.hbm.xml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<many-to-one
	name="TimeSheetID"
	column="TimeSheetID"
	class="TTimesheet"
	not-null="false"
	>
</many-to-one>
Je souhaite récupérer un timesheet pour une période et un utilisateur donnée ainsi que la liste des activités associés a ce timesheet. Pour ce faire j’ai fais une méthode comme ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public TimeSheet getTimeSheetUser(User user, DateObject dateObject)
			throws HibernateException, NotExistingTimeSheetException
	{
		Session session = hibernateUtil.openSession();
 
		String queryString =
			"from TTimesheet as t where t.UserID = ? and t.Month = ? and t.Year = ?";
		Query query = session.createQuery(queryString);
		query.setInteger(0, user.getId());
		query.setInteger(1, dateObject.getMonth());
		query.setInteger(2, dateObject.getYear());
		List ttimesheet = query.list();
 
		if (ttimesheet == null || ttimesheet.size() == 0)
			throw new NotExistingTimeSheetException(user.getLogin());
 
		TimeSheet result = ObjectsUtil.getTimeSheet(ttimesheet);
 
		return result;
	}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public static TimeSheet getTimeSheet(List ttimesheets)
	{
		TimeSheet result = new TimeSheet();
		for (Object o : ttimesheets)
		{
			for(TActivity ac : ((TTimesheet)o).getTActivities())
				System.out.println("heure " + ac.getNbHour() + " date " + ac.getDayDate() + " " + ac.getActivityTypeID().getDetails());
		}
		return result;
	}

Test : month -> 2 , year -> 2008

Et voici le resultat:

heure 7.5 date 2008-02-02 00:00:00.0 Mission

alors que dans ma base il y a plusieurs activités associé a ce timesheet. Il devrait donc passé plusieurs fois dans le for (TActivity ac : ((TTimesheet)o).getTActivities()) , au lieu de ça il me récupère que la première activité…

quelqu'un aurait une idée please ?

merci