Hibernate version:
3.0.2
Salut,
Je suis en train d'implémenter une fonctionnalité de recherche dans mon application J2EE et je trouve que l'API Criteria est vraiment fantastique.
J'ai cependant un problème avec un critère sur une table liée.
Je manipule un objet Worker (cf mapping et code ci-dessous) qui a certaines disponibilités : lundi matin, vacances d'été etc.
Dans la base, j'ai une table t_workerdisponibility avec les champs "mondayMorningYN", "summerYN" etc.
Dans mon action submit, je fais ceci :
Code:
Criteria criteria = session.createCriteria( Worker.class );
//récupérer les disponibilités
Criteria disponibilitiesCriteria = criteria.createCriteria( "disponibilities" );
if ( form.getDisponibilities().isMondayMorning() )
disponibilitiesCriteria.add( Restrictions.eq("mondayMorning", new Boolean( true )) );
et je lorsque dans mon formulaire je coche la case correspondant au lundi matin, je reçois l'erreur ci-dessous.
Pourtant, j'ai pu faire quelque chose de similaire qui marche très bien pour la commune :
Code:
//récupérer la commune
Integer cityId = form.getCityId();
Criteria addressCriteria = null;
if ( cityId != null && cityId.intValue() > 0 )
{
City city = CitiesDAO.instance().getCityById( cityId );
addressCriteria = criteria.createCriteria( "contactPoints" );
addressCriteria.add( Restrictions.eq("city", city) );
}
La différence entre les deux, c'est que pour la commune, il s'agit d'une collection de "contactPoints" qui sont les moyens de contacter la personne (adresse, téléphone, email, mobile) et dans le cas des disponibilités, il s'agit d'une table liée.
Je ne vois pas d'où vient le problème, j'espère que quelqu'un pourra m'éclairer.
Merci d'avance
Lilian
Mapping documents:Worker.hbm.xml :Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<subclass
name="bab.admin.model.persistent.Worker"
discriminator-value="worker"
extends="bab.admin.model.persistent.IParty" >
<!--<property
name="workedHours"
formula="( SELECT (HOUR(p.endDate)-HOUR(p.startDate)) FROM t_period p where p.periodId = periodId )" />-->
<!--<property name="workedJobs"
formula="( SELECT COUNT(mission.serviceWorkerId) FROM t_serviceworker mission
WHERE mission.partyId = partyId )" />-->
<set
name="specialities"
table="t_workerspeciality"
lazy="true"
cascade="save-update"
sort="unsorted" >
<key column="partyId"></key>
<many-to-many
class="bab.admin.model.persistent.Speciality"
column="specialityId"
outer-join="auto" />
</set>
<set
name="jobsWorker"
inverse="true" >
<key column="partyId" />
<one-to-many
class="bab.admin.model.persistent.JobWorker" />
</set>
<join table="t_avs">
<key column="partyId" />
<component name="avs">
<property name="cotise" column="cotiseYN" type="java.lang.Boolean"/>
<property name="number" column="avsNumber" />
<property name="requestDate" />
<property name="expeditionDate" />
<property name="receptionDate" />
</component>
</join>
<join table="t_person">
<key column="partyId" />
<property name="sex" />
<property name="title" />
<property name="maritalStatus" column="maritalStatusCode" />
<property name="birthdate" />
<property name="accountInfo" />
<component
name="fullname"
class="bab.admin.model.persistent.Fullname" >
<property name="firstname" />
<property name="lastname" />
</component>
</join>
<join table="t_worker">
<key column="partyId" />
<property name="enabled" type="java.lang.Boolean" update="true"
insert="true" access="property" column="enabledYN" not-null="false"
unique="false" />
<property name="critic" type="java.lang.String" update="true"
insert="true" access="property" column="critic" not-null="false"
unique="false" />
<property name="compliment" type="java.lang.String"
update="true" insert="true" access="property" column="compliment"
not-null="false" unique="false" />
<property name="motivationCode" type="java.lang.String"
update="true" insert="true" access="property" column="motivationCode"
not-null="true" unique="false" />
<property name="motivationShortCode" type="java.lang.String"
update="true" insert="true" access="property"
column="motivationShortCode" not-null="true" unique="false" />
<property name="affiliationDate" type="java.util.Date"
update="true" insert="true" access="property"
column="affiliationDate" not-null="true" unique="false" />
<property name="lastReactivationDate" type="java.util.Date"
update="true" insert="true" access="property"
column="lastReactivationDate" not-null="false" unique="false" />
<property name="workPermitCode" type="java.lang.String"
update="true" insert="true" access="property" column="workPermitCode"
not-null="true" unique="false" />
<property name="authorizationExpirationDate"
type="java.util.Date" update="true" insert="true" access="property"
column="authorizationExpirationDate" not-null="false" unique="false" />
<property name="source" type="java.lang.Boolean" update="true"
insert="true" access="property" column="sourceYN" not-null="false"
unique="false" />
<many-to-one
name="activity"
column="activityId" />
</join>
<join table="t_workerDisponibility" >
<key column="partyId" />
<component
name="disponibilities"
class="bab.admin.model.persistent.Disponibility" >
<property name="mondayMorning" column="mondayMorningYN" />
<property name="mondayAfternoon" column="mondayAfternoonYN" />
<property name="mondayNight" column="mondayNightYN" />
<property name="tuesdayMorning" column="tuesdayMorningYN" />
<property name="tuesdayAfternoon" column="tuesdayAfternoonYN" />
<property name="tuesdayNight" column="tuesdayNightYN" />
<property name="wednesdayMorning" column="wednesdayMorningYN" />
<property name="wednesdayAfternoon" column="wednesdayAfternoonYN" />
<property name="wednesdayNight" column="wednesdayNightYN" />
<property name="thursdayMorning" column="thursdayMorningYN" />
<property name="thursdayAfternoon" column="thursdayAfternoonYN" />
<property name="thursdayNight" column="thursdayNightYN" />
<property name="fridayMorning" column="fridayMorningYN" />
<property name="fridayAfternoon" column="fridayAfternoonYN" />
<property name="fridayNight" column="fridayNightYN" />
<property name="saturdayMorning" column="saturdayMorningYN" />
<property name="saturdayAfternoon" column="saturdayAfternoonYN" />
<property name="saturdayNight" column="saturdayNightYN" />
<property name="sundayMorning" column="sundayMorningYN" />
<property name="sundayAfternoon" column="sundayAfternoonYN" />
<property name="sundayNight" column="sundayNightYN" />
<property name="february" column="februaryYN" />
<property name="paques" column="paquesYN" />
<property name="summer" column="summerYN" />
<property name="autumn" column="autumnYN" />
<property name="noel" column="noelYN" />
<property name="jeunegenevois" column="jeunegenevoisYN" />
<property name="ascension" column="ascensionYN" />
<property name="pentecote" column="pentecoteYN" />
</component>
</join>
</subclass>
</hibernate-mapping>
Worker.javaCode:
/*
* Créé le 4 avr. 2005
*/
package bab.admin.model.persistent;
import java.util.*;
import java.util.Date;
import org.apache.commons.logging.*;
import bab.admin.web.action.jobs.*;
/**
* Jeune à qui la BAB fournit du travail
* Par défaut :
* <ul>
* <li>les jeunes sont activés</li>
* <li>le "motivationCode" des jeunes est "worker.motivation.normal"</li>
* <li>le "motivationShortCode" des jeunes est "worker.motivation.short.normal"</li>
* </ul>
*
* hibernate.subclass !!!DECLARER MANUELLEMENT !!!!!
* @hibernate.joined-subclass table="t_worker" extends="bab.admin.model.persistent.IParty"
*
* @uml.dependency supplier="bab.admin.model.persistent.Evaluation"
* @uml.dependency supplier="bab.admin.model.persistent.Speciality"
*/
public class Worker implements IPerson, IParty
{
Log log = LogFactory.getLog( this.getClass() );
/** Le jeune attend qu'on lui propose une mission */
public static final String WAITING_FOR_A_JOB = "worker.status.waiting";
/** Le jeune est affecté à une mission et attend que le travail commence */
public static final String AFFECTED = "worker.status.affected";
/** Le jeune est en cours de mission */
public static final String WORKING = "worker.status.working";
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
/** Le jeune est très motivé */
public static final String MOTIVATION_PLUSPLUS = "worker.motivation.plusplus";
public static final String MOTIVATION_PLUSPLUS_SHORT = "worker.motivation.plusplus.short";
/** Le jeune est motivé */
public static final String MOTIVATION_PLUS = "worker.motivation.plus";
public static final String MOTIVATION_PLUS_SHORT = "worker.motivation.plus.short";
/** Le jeune est normal */
public static final String MOTIVATION_NORMAL = "worker.motivation.normal";
public static final String MOTIVATION_NORMAL_SHORT = "worker.motivation.normal.short";
/** Le jeune n'est pas motivé */
public static final String MOTIVATION_LESS = "worker.motivation.less";
public static final String MOTIVATION_LESS_SHORT = "worker.motivation.less.short";
/** Le jeune n'est pas du tout motivé */
public static final String MOTIVATION_LESSLESS = "worker.motivation.lessless";
public static final String MOTIVATION_LESSLESS_SHORT = "worker.motivation.lessless.short";
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
/** Le jeune est imposé à la source */
public static final String SOURCE_YES = "worker.tax.source";
/** Le jeune est imposé normalement */
public static final String SOURCE_NO = "worker.tax.normal";
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
/** Le jeune a un permis valable */
public static final String WORK_PERMIT_C = "worker.permit.valid";
/** Le jeune est Suisse */
public static final String WORK_PERMIT_CH = "worker.permit.ch";
/** Le jeune doit demander une authorization pour travailler */
public static final String WORK_PERMIT_AUTHORIZATION = "worker.permit.authorization";
/** On ne connais pas le permis du jeune */
public static final String WORK_PERMIT_UNKNOWN = "worker.permit.unknown";
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
/** Age minimum des jeunes inscrits */
public static final int MINIMUM_AGE = 15; //TODO à vérifier
/** Age maximum des jeunes inscrits */
public static final int MAXIMUM_AGE = 20;
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
/**
*
* @uml.property name="id"
*/
private Integer id, id2;
/**
*
* @uml.property name="person"
* @uml.associationEnd inverse=":bab.admin.model.persistent.Person"
*/
private PersonData person = new PersonData();
/**
*
* @uml.property name="avs"
* @uml.associationEnd inverse=":bab.admin.model.persistent.AVS"
*/
private AVS avs = new AVS();
/** @uml.property name="contactPoints" */
private Collection contactPoints = new HashSet();
/**
*
* @uml.property name="activity"
* @uml.associationEnd inverse=":bab.admin.model.persistent.Activity"
*/
private Activity activity;
/**
*
* @uml.property name="enabled"
*/
private boolean enabled = true;
/**
*
* @uml.property name="comment"
*/
private String comment = new String();
/**
*
* @uml.property name="critic"
*/
private String critic = new String();
/**
*
* @uml.property name="compliment"
*/
private String compliment = new String();
/**
*
* @uml.property name="motivationCode"
*/
private String motivationCode = MOTIVATION_NORMAL;
/**
*
* @uml.property name="motivationShortCode"
*/
private String motivationShortCode = MOTIVATION_NORMAL_SHORT;
/**
*
* @uml.property name="affiliationDate"
*/
private Date affiliationDate;
/**
*
* @uml.property name="lastReactivationDate"
*/
private Date lastReactivationDate;
/**
*
* @uml.property name="workPermitCode"
*/
private String workPermitCode;
/**
*
* @uml.property name="authorizationExpirationDate"
*/
private Date authorizationExpirationDate;
/**
*
* @uml.property name="source"
*/
private Boolean source;
/**
*
* @uml.property name="specialities"
*/
private Collection specialities = new HashSet();
/** @uml.property name="disponibilities" */
private Disponibility disponibilities = new Disponibility();
/**
*
* @uml.property name="evaluations"
*/
private String partyType = "worker";
/** @uml.property name="accountInfo" */
private String accountInfo;
private Collection jobsWorker = new HashSet();
private Collection comments = new HashSet();
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
/**
* @uml.property name="id"
* hibernate.id generator-class="assigned" type="java.lang.Integer" column="partyId"
* */
public Integer getId()
{
return id;
}
/** @uml.property name="id" */
public void setId( Integer value )
{
this.id = value;
}
/**
* @uml.property name="enabled"
* @hibernate.property name="getEnabled" column="enabledYN" type="java.lang.Boolean" not-null="false" unique="false"
*
* @return java.
* @return true si le jeune est actif, false si il est désactivé
*/
public boolean isEnabled()
{
return enabled;
}
/**
* @uml.property name="enabled"
* @param enabled true si le jeune est actif, false si il est désactivé
*/
public void setEnabled( boolean enabled )
{
this.enabled = enabled;
}
/**
* @uml.property name="comment"
* hibernate.property name="getComment" column="comment" type="java.lang.String" not-null="false" unique="false"
* TODO voir comment faire pour le comment
* @return java.lang.String
* @return
*/
public String getComment()
{
return comment;
}
/**
* @uml.property name="comment"
* @return Un évcntuel commentaire au sujet du jeune
*/
public void setComment( String comment )
{
this.comment = comment;
}
/**
* @uml.property name="critic"
* @hibernate.property name="getCritic" column="critic" type="java.lang.String" not-null="false" unique="false"
*
* @return java.lang.String
* @return Une éventuelle critique au sujet du jeune
*/
public String getCritic()
{
return critic;
}
/**
* @uml.property name="critic"
* @param critic Une éventuelle critique au sujet du jeune
*/
public void setCritic( String critic )
{
this.critic = critic;
}
/**
* @uml.property name="compliment"
* @hibernate.property name="getCompliment" column="compliment" type="java.lang.String" not-null="false" unique="false"
*
* @return java.lang.String
* @return Un éventuel compliment concernant le jeune
*/
public String getCompliment()
{
return compliment;
}
/**
* @uml.property name="compliment"
* @param compliment Un éventuel compliment concernant le jeune
*/
public void setCompliment( String compliment )
{
this.compliment = compliment;
}
/**
* @uml.property name="motivationCode"
* @hibernate.property name="getMotivationCode" column="motivationCode" type="java.lang.String" not-null="true" unique="false"
*
* @return java.lang.String
* @return par ex. MOTIVATION_PLUSPLUS = worker.motivation.plusplus
*/
public String getMotivationCode()
{
return motivationCode;
}
/**
* @uml.property name="motivationCode"
* @param motivationCode par ex. MOTIVATION_PLUSPLUS = worker.motivation.plusplus
*/
public void setMotivationCode( String motivationCode )
{
this.motivationCode = motivationCode;
this.motivationShortCode = getMotivationShortCode( motivationCode );
}
/**
* @uml.property name="motivationShortCode"
* @hibernate.property name="getMotivationShortCode" column="motivationShortCode" type="java.lang.String" not-null="true" unique="false"
*
* @return java.lang.String
* @return par ex. MOTIVATION_PLUSPLUS = worker.motivation.plusplus
*/
public String getMotivationShortCode()
{
return motivationShortCode;
}
/**
* @uml.property name="motivationShortCode"
* @param motivationCode par ex. MOTIVATION_PLUSPLUS = worker.motivation.plusplus
*/
public void setMotivationShortCode( String motivationShortCode )
{
this.motivationShortCode = motivationShortCode;
this.motivationCode = getMotivationCode( motivationShortCode );
}
/**
*
* @param motivationShortCode
* @return motivationCode correspondant au motivationShortCode
*/
public String getMotivationCode( String motivationShortCode )
{
if ( motivationShortCode.equals(MOTIVATION_PLUSPLUS_SHORT) )
return MOTIVATION_PLUSPLUS;
else if ( motivationShortCode.equals(MOTIVATION_PLUS_SHORT) )
return MOTIVATION_PLUS;
else if ( motivationShortCode.equals(MOTIVATION_NORMAL_SHORT) )
return MOTIVATION_NORMAL;
else if ( motivationShortCode.equals(MOTIVATION_LESS_SHORT) )
return MOTIVATION_LESS;
else if ( motivationShortCode.equals(MOTIVATION_LESSLESS_SHORT) )
return MOTIVATION_LESSLESS;
log.error( "On aurait pas du arriver là" );
return "";
}
/**
*
* @param motivationCode
* @return motivationShortCode correspondant au motivationCode
*/
public String getMotivationShortCode( String motivationCode )
{
if ( motivationCode.equals(MOTIVATION_PLUSPLUS) )
return MOTIVATION_PLUSPLUS_SHORT;
else if ( motivationCode.equals(MOTIVATION_PLUS) )
return MOTIVATION_PLUS_SHORT;
else if ( motivationCode.equals(MOTIVATION_NORMAL) )
return MOTIVATION_NORMAL_SHORT;
else if ( motivationCode.equals(MOTIVATION_LESS) )
return MOTIVATION_LESS_SHORT;
else if ( motivationCode.equals(MOTIVATION_LESSLESS) )
return MOTIVATION_LESSLESS_SHORT;
log.error( "On aurait pas du arriver là" );
return "";
}
/**
* @uml.property name="affiliationDate"
* @hibernate.property name="getAffiliationDate" column="affiliationDate" type="java.util.Date" not-null="true" unique="false"
*
* @return java.lang.Date
* @return Date à laquelle le jeune s'est inscrit à la BAB
*/
public Date getAffiliationDate()
{
return affiliationDate;
}
/**
* @uml.property name="affiliationDate"
* @param date Date à laquelle le jeune s'est inscrit à la BAB
*/
public void setAffiliationDate( Date date )
{
this.affiliationDate = date;
}
/**
* @uml.property name="lastReactivationDate"
* @hibernate.property name="getLastReactivationDate" column="lastReactivationDate" type="java.util.Date" not-null="false" unique="false"
*
* @return java.util.Date
* @return Date à laquelle le jeune a été réactivé
*/
public Date getLastReactivationDate()
{
return lastReactivationDate;
}
/**
* @uml.property name="affiliationDate"
* @param date Date à laquelle le jeune s'est inscrit à la BAB
*/
public void setLastReactivationDate( Date date )
{
this.lastReactivationDate = date;
}
/**
* @uml.property name="workPermitCode"
* @hibernate.property name="getWorkPermitCode" column="workPermitCode" type="java.lang.String" not-null="true" unique="false"
*
* @return java.lang.String
* @return par ex. WORK_PERMIT_C = worker.permit.c
*/
public String getWorkPermitCode()
{
return workPermitCode;
}
/**
* @uml.property name="workPermitCode"
* @param permitCode par ex. WORK_PERMIT_C = worker.permit.c
*/
public void setWorkPermitCode( String workPermitCode )
{
this.workPermitCode = workPermitCode;
}
/**
* @uml.property name="authorizationExpirationDate"
* @hibernate.property name="getAuthorizationExpirationDate" column="authorizationExpirationDate" type="java.util.Date" not-null="false" unique="false"
*
* @return java.util.Date
* @return Date d'expiration de la dernière demande d'authorization
*/
public Date getAuthorizationExpirationDate()
{
return authorizationExpirationDate;
}
/**
* @uml.property name="authorizationExpirationDate"
* @param date Date d'expiration de la dernière demande d'authorization
*/
public void setAuthorizationExpirationDate( Date date )
{
this.authorizationExpirationDate = date;
}
/**
* @hibernate.property name="getSource" column="sourceYN" type="java.lang.Boolean" not-null="false" unique="false"
*
* @return java.lang.Boolean
* @uml.property name="source"
*/
public Boolean getSource()
{
return source;
}
/**
* @uml.property name="source"
*/
public void setSource( Boolean source )
{
this.source = source;
}
/**
* @return <ul><li>SOURCE_YES = worker.tax.source</li><li>SOURCE_NO = worker.tax.normal</li></ul>
* TODO a tester
* @uml.property name="source"
*/
public String getSourceStatus()
{
if ( source != null ) //le type d'imposition a été défini explicitement
{
if ( source.booleanValue() )
return SOURCE_YES;
else
return SOURCE_NO;
}
//le type d'imposition doit être calculé en fonction de l'âge
if ( isAdult() )
return SOURCE_NO;
else
return SOURCE_YES;
}
/**
* Est considéré comme adulte, tout jeune dont le 1er janvier
* suivant le 17ème anniversaire est déjà passé.
* TODO à tester
* @return true si le jeune est considéré comme un adult.
*/
public boolean isAdult()
{
int age = getAge();
if ( age < 17 )
return false;
if ( age >= 18 )
return true;
Date today, seventeenBirthday, firstJanuaryNextToSeventeenBirthday;
today = new Date();
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime( getBirthdate() );
calendar.add( Calendar.YEAR, 17 );
seventeenBirthday = calendar.getTime();
calendar.setTime( today );
if ( (calendar.get(Calendar.MONTH) + 1) > Calendar.JANUARY )
calendar.add( Calendar.YEAR, 1 );
calendar.set( Calendar.DATE, 1 );
calendar.set( Calendar.MONTH, Calendar.JANUARY );
firstJanuaryNextToSeventeenBirthday = calendar.getTime();
if ( firstJanuaryNextToSeventeenBirthday.after(today) )
return true;
return false;
}
/**
* @return Collection de Speciality
* @uml.property name="specialities"
* @hibernate.set name="getSpecialities" table="t_workerspeciality" cascade="save-update" inverse="true" lazy="true"
* @hibernate.collection-key column="partyId"
* @hibernate.collection-many-to-many class="bab.admin.model.persistent.Speciality" column="specialityId"
* @return Collection
*/
public Collection getSpecialities()
{
return specialities;
}
/**
* @param specialities Collection de Speciality
* @uml.property name="specialities"
*/
public void setSpecialities( Collection specialities )
{
this.specialities = specialities;
}
/**
* @uml.property name="disponibilities"
* @return Collection de Disponibility's
* */
public Disponibility getDisponibilities()
{
return disponibilities;
}
/**
* @uml.property name="disponibilities"
* @param disponibilities Collection de Disponibility's
* */
public void setDisponibilities( Disponibility disponibilities )
{
this.disponibilities = disponibilities;
}
/**
* @uml.property name="avs"
* @hibernate.one-to-one
*/
public AVS getAvs()
{
return avs;
}
/**
* Status AVS du jeune.
* <br><br>
* Si cotise est null, on calcule en fonction de l'âge.
* Si cotise est false, le jeune ne cotise pas : NO_AVS.
* <br>
* Si avsNumber, requestDate et expeditionDate sont null, la carte ne figure pas dans le dossier : CARD_MISSING
* <br>
* Si avsNumber n'est pas null et expeditionDate est null, la carte n'a pas été timbrée : CARD_NOT_SENT
* <br>
* Si avsNumber n'est pas null, requestDate est null et expeditionDate est null, la carte est timbrée et présente dans le dossier : CARD_OK
* <br>
* Si avsNumber est null, requestDate n'est pas null, le jeune vient de demander une carte : CARD_REQUESED
* <br>
* Si avsNumber et expeditionDate ne sont pas null, la carte du jeune a été envoyée pour être timbrée : CARD_SENT.
* TODO a tester
*/
public String getAvsStatus()
{
if ( getAvs().getCotise() == null ) //on doit calculer en fonction de l'âge
{
if ( !isAdult() )
return AVS.NO_AVS;
}
return getAvs().getStatus();
}
/**
* @uml.property name="avs"
*/
public void setAvs( AVS avs )
{
//if ( avs == null ) //TODO à voir, hibernate initialise à false...
//return;
this.avs = avs;
}
/** @uml.property name="birthdate" */
public Date getBirthdate()
{
return getPerson().getBirthdate();
}
//TODO à tester
public int getAge()
{
if ( getBirthdate() == null )
{
return -1;
}
Calendar today = Calendar.getInstance();
Calendar bd = Calendar.getInstance();
bd.setTime( getBirthdate() );
int age = today.get( Calendar.YEAR ) - bd.get( Calendar.YEAR );
if ( (today.get( Calendar.MONTH ) - bd.get( Calendar.MONTH )) < 0 )
{
age--;
}
if ( (today.get( Calendar.MONTH) - bd.get( Calendar.MONTH )) == 0 && bd.get(Calendar.DATE) < 0 )
{
age--;
}
return age;
}
/** @uml.property name="birthdate" */
public void setBirthdate( Date birthdate )
{
getPerson().setBirthdate( birthdate );
}
/** @uml.property name="maritalStatus" */
public String getMaritalStatus()
{
return getPerson().getMaritalStatus();
}
/** @uml.property name="maritalStatus" */
public void setMaritalStatus( String status )
{
getPerson().setMaritalStatus( status );
}
/** @uml.property name="sex" */
public String getSex()
{
return getPerson().getSex();
}
/** @uml.property name="sex" */
public void setSex( String sex )
{
getPerson().setSex( sex );
}
/** @uml.property name="title" */
public String getTitle()
{
return getPerson().getTitle();
}
/**
* @uml.property name="title"
*/
public void setTitle( String title )
{
getPerson().setTitle( title );
}
/**
* uml.property name="evaluations"
* @return Returns the evaluations.
*/
/*public Collection getEvaluations()
{
return evaluations;
}*/
/**
* uml.property name="evaluations"
* @param evaluations The evaluations to set.
*/
/*public void setEvaluations( Collection evaluations )
{
this.evaluations = evaluations;
}*/
/**
*
* @uml.property name="fullname"
*
*/
public Fullname getFullname()
{
return getPerson().getFullname();
}
/**
*
* @uml.property name="fullname"
*
*/
public void setFullname( Fullname fullname )
{
getPerson().setFullname( fullname );
}
/**
* @return Returns the person.
* @uml.property name="person"
* hibernate.one-to-one cascade="none"
*/
public PersonData getPerson()
{
return person;
}
/**
* @param person The person to set.
* @uml.property name="person"
*/
public void setPerson( PersonData person )
{
this.person = person;
}
/**
* @return Returns the partyType.
* @uml.property name="partyType"
*/
public String getPartyType()
{
return partyType;
}
/**
* @param partyType The partyType to set.
* @uml.property name="partyType"
*/
public void setPartyType( String partyType )
{
this.partyType = partyType;
}
/**
* @uml.property name="activity"
* @return Returns the activity.
*/
public Activity getActivity()
{
return activity;
}
/**
* @uml.property name="activity"
* @param activity The activity to set.
*/
public void setActivity( Activity activity )
{
this.activity = activity;
}
/** @uml.property name="contactPoints" */
public Collection getContactPoints()
{
return contactPoints;
}
/** @uml.property name="contactPoints" */
public void setContactPoints( Collection contactPoints )
{
this.contactPoints = contactPoints;
}
public void addContactPoint( ContactPoint contactPoint )
{
contactPoint.setParty( this );
contactPoints.add( contactPoint );
}
/**
* @uml.property name="accountInfo"
*/
public String getAccountInfo()
{
return this.accountInfo;
}
/**
* @uml.property name="accountInfo"
*/
public void setAccountInfo( String info )
{
this.accountInfo = info;
}
//TODO à tester
//TODO à optimiser
public MailContactPoint getAddress()
{
for ( Iterator iter = getContactPoints().iterator(); iter.hasNext(); )
{
ContactPoint contactPoint = (ContactPoint)iter.next();
if ( contactPoint instanceof MailContactPoint )
{
MailContactPoint mailContactPoint = (MailContactPoint)contactPoint;
return mailContactPoint;
}
}
return null;
}
/**
* Définit l'adress du jeune.
* Si address est null, l'adresse actuelle est supprimée.
* @param address
*/
public void setAddress( MailContactPoint address )
{
if ( address == null )
{
getContactPoints().remove( getAddress() );
return;
}
MailContactPoint currentAddress = getAddress();
if ( currentAddress != null )
{
currentAddress.setStreet( address.getStreet() );
currentAddress.setStreetNumber( address.getStreetNumber() );
currentAddress.setHosted( address.getHosted() );
currentAddress.setCity( address.getCity() );
currentAddress.setQuartier( address.getQuartier() );
return;
}
addContactPoint( address );
}
//TODO à tester
//TODO à optimiser
//TODO créer un objet ContactPoints pour encapsuler les contactPoints d'un party et ainsi supprimer le code redondant dans les objets Worker, Contact et Client
public PhoneContactPoint getPhone1()
{
for ( Iterator iter = getContactPoints().iterator(); iter.hasNext(); )
{
ContactPoint contactPoint = (ContactPoint)iter.next();
if ( contactPoint instanceof PhoneContactPoint )
{
PhoneContactPoint phoneContactPoint = (PhoneContactPoint)contactPoint;
return phoneContactPoint;
}
}
return null;
}
/**
* Définit le numéro de téléphone principaldu jeune.
* Si le numéro est nul ou une chaîne vide, le jeune n'a pas
* pas de téléphone et un éventuel n° est supprimé
*/
public void setPhone1( String phoneNumber )
{
if ( phoneNumber == null || phoneNumber.length() < 1 )
{
getContactPoints().remove( getPhone1() );
return;
}
PhoneContactPoint phone1 = getPhone1();
if ( phone1 != null )
{
phone1.setPhoneNumber( phoneNumber );
return;
}
phone1 = new PhoneContactPoint( phoneNumber );
addContactPoint( phone1 );
}
//TODO à tester
//TODO à optimiser
public PhoneContactPoint getPhone2()
{
for ( Iterator iter = getContactPoints().iterator(); iter.hasNext(); )
{
ContactPoint contactPoint = (ContactPoint)iter.next();
if ( contactPoint instanceof PhoneContactPoint && contactPoint != getPhone1() )
{
PhoneContactPoint phoneContactPoint = (PhoneContactPoint)contactPoint;
return phoneContactPoint;
}
}
return null;
}
//TODO à tester
//TODO à optimiser
public EmailContactPoint getEmail()
{
for ( Iterator iter = getContactPoints().iterator(); iter.hasNext(); )
{
ContactPoint contactPoint = (ContactPoint)iter.next();
if ( contactPoint instanceof EmailContactPoint )
{
EmailContactPoint emailContactPoint = (EmailContactPoint)contactPoint;
return emailContactPoint;
}
}
return null;
}
/**
* Définit l'adresse email du jeune.
* Si l'adresse email est nulle ou une chaîne vide, le jeune n'a pas
* pas d'adresse email et une éventuelle addresse email existante est supprimée
*/
public void setEmail( String emailAddress )
{
if ( emailAddress == null || emailAddress.length() < 1 )
{
getContactPoints().remove( getEmail() );
return;
}
EmailContactPoint email = getEmail();
if ( email != null )
{
email.setAddress( emailAddress );
return;
}
email = new EmailContactPoint( emailAddress );
addContactPoint( email );
}
// TODO à tester
//TODO à optimiser
public MobileContactPoint getMobile()
{
for ( Iterator iter = getContactPoints().iterator(); iter.hasNext(); )
{
ContactPoint contactPoint = (ContactPoint)iter.next();
if ( contactPoint instanceof MobileContactPoint )
{
MobileContactPoint mobileContactPoint = (MobileContactPoint)contactPoint;
return mobileContactPoint;
}
}
return null;
}
/**
* Définit l'adresse email du jeune.
* Si l'adresse email est nulle ou une chaîne vide, le jeune n'a pas
* pas d'adresse email et une éventuelle addresse email existante est supprimée
*/
public void setMobile( String mobileNumber )
{
if ( mobileNumber == null || mobileNumber.length() < 1 )
{
getContactPoints().remove( getMobile() );
return;
}
MobileContactPoint mobile = getMobile();
if ( mobile != null )
{
mobile.setMobileNumber( mobileNumber );
return;
}
mobile = new MobileContactPoint( mobileNumber );
addContactPoint( mobile );
}
/**
* Situation actuelle du jeune : en attente d'un job, affecté à une mission ou actuellement au travail
* <ol>
* <li>
* <u>WAITING_FOR_A_JOB = "worker.status.waiting"</u>
* <br>
* Le jeune n'est affecté à aucun job dont le status est NEGOTIATING,
* WAITING_FOR_JOB ou JOB_IN_PROGRESS
* </li>
* <li>
* <u>AFFECTED = "worker.status.affected"</u>
* <br>
* Le jeune est affecté à un job dont le statut est NEGOTIATING ou WAITING_FOR_JOB
* </li>
* <li>
* <u>WORKING = "worker.status.working"</u>
* <br>
* Le jeune est affecté à un job dont le statut est JOB_IN_PROGRESS et dont
* la date du jour est postérieure à la date de début et antérieure à la date de fin d'une période
* à laquelle il est affecté
* </li>
* </ol>
* TODO à tester
* TODO actuellement si le jeune est affecté à plusieurs job on ne peut pas connaître les différents status
* RG worker status
*/
public String getStatus()
{
Collection jobs = getJobs();
if ( jobs == null || jobs.size() < 1 )
{
return WAITING_FOR_A_JOB;
}
for ( Iterator iter = jobs.iterator(); iter.hasNext(); )
{
Job job = (Job)iter.next();
String status = job.getStatus();
if ( status.equals(Job.NEGOTIATING) || status.equals(Job.WAITING_FOR_JOB) )
{
return AFFECTED;
}
if ( status.equals(Job.JOB_IN_PROGRESS) )
{
//TODO implémenter
return WORKING;
}
}
return WAITING_FOR_A_JOB;
}
/**
* Retourne le job auquel le jeune est associé
* TODO actuellement si le jeune est affecté à plusieurs job on ne peut en connaître qu'un
* @return
*/
public Collection getJobs()
{
return null;
}
/**
* @return Returns the jobsWorker.
*/
public Collection getJobsWorker()
{
return jobsWorker;
}
/**
* @param jobsWorker The jobsWorker to set.
*/
public void setJobsWorker( Collection jobsWorker )
{
this.jobsWorker = jobsWorker;
}
/**
* Retourne les objets "JobWorkerPeriods" (encapsulations des associations du jeune aux jobs) dont
* job.status = terminated
* @return
*/
public Collection getHistory()
{
ArrayList history = new ArrayList();
for ( Iterator iter = getJobsWorker().iterator(); iter.hasNext(); )
{
JobWorker jw = (JobWorker)iter.next();
Date endDate = jw.getJob().getLastPeriod().getEnd();
//if ( jw.getJob().getLastPeriod().getEnd().before(new Date()) )
if ( jw.getJob().getStatus().equals(Job.TERMINATED) )
history.add( new JobWorkerPeriods(jw) );
}
return history;
}
/**
* Nombre de missions effectuées par le jeune (lorsque job.status = terminated)
* @return
*/
public int getWorkedJobs()
{
return getHistory().size();
}
public int getWorkedHours()
{
int total = 0;
Collection workedJobs = getHistory();
for ( Iterator iter = workedJobs.iterator(); iter.hasNext(); )
{
JobWorkerPeriods jw = (JobWorkerPeriods)iter.next();
total += jw.getWorkedHours();
}
return total;
}
/**
*
*/
public Collection getComments()
{
return comments;
}
/**
*
*/
public void setComments( Collection comments )
{
this.comments = comments;
}
public void addComment( Comment comment )
{
getComments().add( comment );
}
}
Full stack trace of any exception that occurs:Code:
org.hibernate.QueryException: could not resolve property: mondayMorning of: bab.admin.model.persistent.Worker
at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
at org.hibernate.persister.entity.BasicEntityPersister.getSubclassPropertyTableNumber(BasicEntityPersister.java:1110)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:33)
at org.hibernate.persister.entity.BasicEntityPersister.toColumns(BasicEntityPersister.java:1086)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:402)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:368)
at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:42)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:313)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1236)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:299)
at bab.admin.model.dao.DefaultDAO.search(DefaultDAO.java:100)
at bab.admin.web.action.workers.SearchSubmitAction.execute(SearchSubmitAction.java:133)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at bab.admin.web.filter.HibernateFilter.doFilter(HibernateFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Name and version of the database you are using:
MySQL 4.1