Bonjour à tous,
J'ai commencé à utiliser Hibernate depuis quelques jours et je suis confronté à un problème relativement génant :
J'ai une classe prospect qui contient un lien vers une classe historique :
Mapping classe prospect :
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Prospect" table="PROSPECT" dynamic-update="true" lazy="true">
<id name="id" column="ID_PROSPECT">
<generator class="increment" />
</id>
<property name="num_prospect" column="NUM_PROSPECT"/>
<property name="etat_prospect" column="ETAT_PROSPECT" lazy="true" />
<property name="dateContact" column="DATE_CONTACT" lazy="true" />
<bag name="historique" inverse="true" lazy="true" cascade="all" order-by="DATE_HISTO">
<key column="id_prospect"/>
<one-to-many class="Historique"/>
</bag>
</class>
</hibernate-mapping>
Mapping de la classe HistoriqueCode:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Historique" table="HISTORIQUE" lazy="true">
<id name="id" column="ID_HISTORIQUE">
<generator class="increment" />
</id>
<property name="dateHisto" column="DATE_HISTO" />
<property name="description" column="DESCR" />
<property name="idClient" column="ID_CLIENT" />
<many-to-one name="prospect" column="id_prospect" not-null="true" lazy="true"/>
</class>
</hibernate-mapping>
Lorsque je recherche la liste des prospects :
Code:
public Vector getProspect() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
List result = session.createQuery("from Prospect").list();
tx.commit();
Vector v = new Vector(result.size());
v.addAll(result);
return v;
}
Le code SQL géneré par hibernate RESSEMBLE à :
select ... from Prospect
(avec ... etant l'ensemble des attributs de ma classe prospect)
ET plusieurs
select ... from Historique where historique.id_prospect=prospect.id_prospect
Mon problème est donc :
Comment se fait il qu'hibernate me récupère tous les attributs de ma classe Prospect alors que je leur ai définie l'attribut lazy à true (et que je n'y fais aucune référence par la suite ...)
ET encore plus embetant
Comment se fait il qu'hibernate me récupère l'ensemble des historiques correspondant à chaque Prospect alors que je ne fais aucune référence à l'historique et que j'ai mis également l'attribut lazy à true.
Source des 2 beans :
Code:
public class [b]Prospect[/b] {
private long id;
private String etat_prospect ="";
private String num_prospect ="";
private List historique = new ArrayList();
public Prospect() {
super();
}
public void setId(long newId) {
id=newId;
}
public long getId() {
return id;
}
public void setEtat_prospect(String newEtatProspect) {
if (newEtatProspect!=null) {
this.etat_prospect=newEtatProspect;
}
}
public String getEtat_prospect() {
return this.etat_prospect;
}
public void setNum_prospect(String newNum_prospect)
{
if (newNum_prospect!=null) {
this.num_prospect=newNum_prospect;
}
}
public String getNum_prospect()
{
return this.num_prospect;
}
public List getHistorique() {
return historique;
}
public void setHistorique(List newHistorique) {
if (newHistorique!=null) {
this.historique=newHistorique;
}
}
public void addHistorique(Historique h) {
if (this.historique!=null & h!=null) {
h.setProspect(this);
historique.add(h);
}
}
}
public class Historique {
private long id;
private Calendar dateHisto;
private String description;
private Prospect prospect;
private String idClient;
public void setId(long newId) {
id=newId;
}
public long getId() {
return id;
}
public void setIdClient(String newIdClient) {
if (newIdClient!=null)
this.idClient=newIdClient;
}
public String getIdClient() {
return this.idClient;
}
public void setDateHisto(Calendar newDateHisto) {
if (newDateHisto!=null)
this.dateHisto=newDateHisto;
}
public Calendar getDateHisto() {
return this.dateHisto;
}
public void setDescription(String newDescription) {
if (newDescription!=null)
this.description=newDescription;
}
public String getDescription() {
return this.description;
}
public void setProspect(Prospect newProspect) {
if (newProspect!=null) {
this.prospect=newProspect;
}
}
public Prospect getProspect() {
return this.prospect;
}
}
Merci d'avance pour votre aide !!!