Bonjour,
j'utilise hibernate 2.1.8.
J'ai un relation one-to-one entre deux objet: Contrat et Transaction.
a Chaque contrat est associe une transaction.
je veu faire l'action suivante: chercher les liste des contrats suivant des contraintes, mettre a jour chaque transaction de chaqun des contrat.
et voila les fichiers hbm:
Code:
<class name="Contract" table="contrats">
<id name="msisdn" type="string" length="63">
<generator class="assigned"/>
</id>
<one-to-one
name="transaction"
outer-join="auto"
property-ref="msisdn"
/>
</class>
<class name="Transaction" table="transaction">
<id name="id" column="id">
<generator class="sequence">
<param name="sequence">seq_id_transaction</param>
</generator>
</id>
<property name="msisdn" type="string" length="63"/>
<component name="bscsStatus" >
<property name="value" column="statusbscs"/>
<property name="date" column="statusbscs_date"/>
</component>
</class>
et les classes:
Code:
public class Contract {
private String msisdn;
private Transaction transaction;
public String getMsisdn() {
return msisdn;
}
public void setMsisdn(String msisdn) {
this.msisdn = msisdn;
}
public Transaction getTransaction() {
return transaction;
}
public void setTransaction(Transaction transaction) {
this.transaction = transaction;
}
}
public class Transaction {
protected transient final Log log = LogFactory.getLog(this.getClass());
private Integer id;
private String msisdn;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Status getBscsStatus() {
return bscsStatus;
}
public void setBscsStatus(Status bscsStatus) {
this.bscsStatus = bscsStatus;
}
public String getMsisdn() {
return msisdn;
}
public void setMsisdn(String msisdn) {
this.msisdn = msisdn ;
}
}
et voila le code que j'utilise pour faire mes changements:
Code:
List contracts = contractDao.findListContractToSendByMail();
Status traite = new Status(Status.STATUS_CONTRACT_USED, new Date());
for (Iterator iter = contracts.iterator(); iter.hasNext();) {
Contract contract = (Contract) iter.next();
Transaction transaction = contract.getTransaction();
log.debug("transactions: "+transaction.getMsisdn());
transaction.setBscsStatus(traite);
log.debug("transaction traite: msisdn="
+ transaction.getMsisdn() + " status: "
+ transaction.getBscsStatus().getValue());
Le probleme c que Hibernate fait bien le chargement des contrats, et des transaction, la preuve c le log:
Code:
[net.sf.hibernate.impl.BatcherImpl] - preparing statement
[net.sf.hibernate.type.NullableType] - binding '21622815315' to parameter: 1
[net.sf.hibernate.loader.Loader] - processing result set
[net.sf.hibernate.type.NullableType] - returning '129' as column: id0_
[net.sf.hibernate.loader.Loader] - result row: 129
[net.sf.hibernate.loader.Loader] - done processing result set (1 rows)
[net.sf.hibernate.impl.BatcherImpl] - done closing: 0 open PreparedStatements, 0
open ResultSets
[net.sf.hibernate.impl.BatcherImpl] - closing statement
[net.sf.hibernate.loader.Loader] - total objects hydrated: 0
[net.sf.hibernate.impl.SessionImpl] - done materializing entity [Contract#21622815315]
[net.sf.hibernate.impl.SessionImpl] - initializing non-lazy collections
mais quand je fait getTransaction().getMsisdn(), j'obtien Null!
Merci d'avance pour votre aide.