Bonjour,
Je tente d'utiliser une jointure de table one-to-many, avec un champ de classement dans ma table de jointure.
Base : MySQL 4.0.15
Mes tables :
CREATE TABLE `sequence` (
`seqId` bigint(20) unsigned NOT NULL auto_increment,
`name` varchar(45) NOT NULL default '',
`report` text NOT NULL,
`create` datetime NOT NULL default '0000-00-00 00:00:00',
`typeId` bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (`seqId`)
) TYPE=MyISAM;CREATE TABLE `seq_jobs` (
`id` int(10) NOT NULL default '0',
`seqId` bigint(20) unsigned NOT NULL default '0',
`jobId` bigint(20) unsigned NOT NULL default '0',
`position` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`seqId`,`jobId`,`id`)
) TYPE=MyISAM ROW_FORMAT=FIXED;Mes fichiers de mappings :CREATE TABLE `job` (
`jobId` bigint(20) unsigned NOT NULL auto_increment,
`script_path` varchar(45) NOT NULL default '',
`params` varchar(45) NOT NULL default '',
PRIMARY KEY (`jobId`)
) TYPE=MyISAM;
<hibernate-mapping package="hibernate.mapping">
<class name="Sequence" table="sequence" catalog="sequenceur">
<id name="id" type="java.lang.Long">
<column name="seqId" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="45" not-null="true" />
</property>
<property name="report" type="java.lang.String">
<column name="report" length="65535" not-null="true" />
</property>
<property name="create" type="java.util.Date">
<column name="create" length="19" not-null="true" />
</property>
<many-to-one name="type" column="typeId" class="Type" />
<set name="jobs" table="seq_jobs" inverse="true" order-by="position">
<key column="seqId" />
<composite-element class="JobSequence">
<parent name="sequence" />
<property name="position" column="position" />
<many-to-one name="job" column="jobId" fetch="select" />
</composite-element>
</set>
</class>
</hibernate-mapping>Par contre, je n'ai pas de mapping pour la classe JobSequence comme conseillé dans le livre Hibernate 3.0 de Anthony Patricio chez Eyrolles.<hibernate-mapping package="hibernate.mapping">
<class name="Job" table="job" catalog="sequenceur">
<id name="id" type="java.lang.Long">
<column name="jobId" />
<generator class="native"></generator>
</id>
<property name="scriptPath" type="java.lang.String">
<column name="script_path" length="45" not-null="true" />
</property>
<property name="params" type="java.lang.String">
<column name="params" length="45" not-null="true" />
</property>
<set name="sequences" table="seq_jobs" cascade="all">
<key column="jobId" />
<many-to-many class="Sequence" column="seqId" fetch="select" />
</set>
</class>
</hibernate-mapping>
Le code que j'ai est le suivant et est identique à celui proposé dans le bouquin pages 104/105.
Merci d'avance pour votre aide.public class Sequence extends AbstractSequence implements java.io.Serializable {
/...
public void importJob(final Job job) {
Transaction tx = null;
Session session = HibernateSessionFactory.currentSession();
try {
tx = session.beginTransaction();
JobSequence js = new JobSequence();
js.setSequence(this);
js.setJob(job);
js.setPosition(jobs.size() + 1);
this.getSequenceJobs().add(js);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if (tx != null && tx.isActive())
tx.rollback();
} finally {
try {
session.close();
} catch (HibernateException he) {
// TODO: handle exception
}
}
}
}
Ps: je ne suis pas un expert.
Partager