Hi
Mapping
Code:
<class name="Task" table="TASK">
<id name="id" column="task_id">
<generator class="native" />
</id>
<property name="date" column="task_date" type="timestamp" not-null="true"/>
<property name="taskBegin" column="task_begin" type="timestamp" not-null="true"/>
<property name="taskEnd" column="task_end" type="timestamp" not-null="true"/>
<property name="notes" column="task_notes" />
<many-to-one name="taskTyp" class="TaskTyp" column="tasktyp_id" not-null="true" />
<many-to-one name="officer" class="Worker" column="worker_id" not-null="true" />
<bag name="workers" table="TASK_WORKERS" >
<key column="task_id" />
<many-to-many column="worker_id" class="Worker" />
</bag>
<many-to-one name="report" class="Report" column="report_id" />
</class>
<class name="Worker" table="WORKER">
<id name="id" column="worker_id">
<generator class="native" />
</id>
<property name="sign" column="worker_sign" not-null="true" unique="true" />
<property name="firstN" column="worker_firstname" />
<property name="lastN" column="worker_lastname" />
</class>
DB Methode
Code:
public ArrayList<Task> getFilteredNonReportTasks(Date start, Date end, ArrayList worker, ArrayList types){
ArrayList tasks = new ArrayList();
Transaction tx = null;
session = HibernateUtil.currentSession();
try {
tx = session.beginTransaction();
Criteria c = session.createCriteria(Task.class).add(Expression.between("date", start, end));
if(types.size() > 0){
c.add(Restrictions.in("taskTyp", types));
}
if(worker.size() > 0){
//c.createCriteria("workers");
c.add(Restrictions.in("workers", worker));
}
tasks = (ArrayList) c.list();
tx.commit();
} catch (HibernateException he) {
if(tx!=null) tx.rollback();
log.error("Error getting filtered Tasks.");
throw he;
}
log.info("Requesting filtered Tasks successfully.");
return tasks;
}
Ich möchte alle Tasks haben die innerhalb des Datumsbereichs sind und ggf. vom angegebenen TaskTyp und ggf. in der Liste der Mitarbeiter(Worker). Mir stehen die persistenten Instanzen der Worker zur verfügung.
Ich denke zu wissen das ich dazu eine Criteria an hängen muss
Code:
c.createCriteria("workers");
aber wie dann weiter wie kann ich dann Restriction angeben die mir das erwünschte ergebnis gibt und eine List zulässt. also nicht über einzel Felder von Worker ... z.B. so
Code:
c.createCriteria("workers");
c.add(Restrictions.in("id", irgendwoHerGeholteWorkerIdList));
Oder geht es nicht anders als die Worker Id in eine extra Liste zu packen??? Oder geht es ganz anders viel einfacher???
Bin für Tipps und Bemerkungen sehr dankbar
Vielen Dank im Voraus ansi_c[/b]