[hibernate] Probleme mapping -> clé composée
Bonjour,
Le problème à été traité plus d'une fois mais j'ai rien trouvé qui réponde à mon problème donc je me permet de vous en faire part.
Je souhaite récupérer les informations de 3 tables qui sont liées les unes au autres. C'est un schema classique où une commune est dans un département qui lui meme est dans une région.
J'ai les tables suivantes qui me pose problème car j'ai ma table commune qui à une clé primaire composée mais en plus un des attributs de cette clé primaire qui référence la clé primaire de la table département.
C'est du postgreSQL comme base ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
CREATE TABLE "public"."sit_com_commune" (
"com_cod_com" CHAR(3) NOT NULL,
"dep_cod_dep" CHAR(3) NOT NULL,
"com_artmin_com" VARCHAR(5),
"com_nccenr_com" VARCHAR(70),
CONSTRAINT "pk_sit_com_commune" PRIMARY KEY("dep_cod_dep", "com_cod_com"),
CONSTRAINT "com_dep" FOREIGN KEY ("dep_cod_dep")
REFERENCES "public"."sit_dep_departement"("dep_cod_dep")
ON DELETE RESTRICT
ON UPDATE RESTRICT
NOT DEFERRABLE
) WITHOUT OIDS;
COMMENT ON COLUMN "public"."sit_com_commune"."com_cod_com"
IS 'Code commune';
COMMENT ON COLUMN "public"."sit_com_commune"."dep_cod_dep"
IS 'Code département';
COMMENT ON COLUMN "public"."sit_com_commune"."com_artmin_com"
IS 'Article Commune';
COMMENT ON COLUMN "public"."sit_com_commune"."com_nccenr_com"
IS 'Nom Commune'; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| CREATE TABLE "public"."sit_dep_departement" (
"dep_cod_dep" CHAR(3) NOT NULL,
"reg_region" CHAR(2) NOT NULL,
"dep_nccenr_dep" VARCHAR(70),
CONSTRAINT "pk_sit_dep_departement" PRIMARY KEY("dep_cod_dep"),
CONSTRAINT "dep_reg" FOREIGN KEY ("reg_region")
REFERENCES "public"."sit_reg_region"("reg_region")
ON DELETE RESTRICT
ON UPDATE RESTRICT
NOT DEFERRABLE
) WITHOUT OIDS;
COMMENT ON COLUMN "public"."sit_dep_departement"."dep_cod_dep"
IS 'Code département';
COMMENT ON COLUMN "public"."sit_dep_departement"."reg_region"
IS 'Code Région';
COMMENT ON COLUMN "public"."sit_dep_departement"."dep_nccenr_dep"
IS 'Nom département'; |
J'ai les 2 fichiers de mapping suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="i2.xxx.yyy.zzz.reference.niveau.valueobject">
<class name="DepartementElementReference" table="sit_dep_departement">
<id name="codeDepartement" type="string">
<column name="dep_cod_dep" sql-type="char(3)" unique="true"/>
</id>
<property name="codeRegion" type="integer">
<column name="reg_region" sql-type="char(2)" not-null="true"/>
</property>
<property name="nomDepartement" type="string">
<column name="dep_nccenr_dep" sql-type="varchar(70)" not-null="false"/>
</property>
</class>
</hibernate-mapping> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="i2.xxx.yyy.zzz.reference.niveau.valueobject">
<class name="CommuneElementReference" table="sit_com_commune">
<composide-id name="comp_id" class="communePK">
<key-property name="codeCommune" type="string" >
<column name="com_cod_com" sql-type="char(3)" not-null="true"/>
</key-property>
<key-property name="codeDepartement" type="string" >
<column name="dep_cod_dep" sql-type="char(3)" not-null="true"/>
</key-property>
</composide-id>
<property name="article" type="string">
<column name="com_artmin_com" sql-type="varchar(5)" not-null="false"/>
</property>
<property name="nomCommune" type="string">
<column name="com_nccenr_com" sql-type="varchar(70)" not-null="false"/>
</property>
</class>
</hibernate-mapping> |
Et sur le dernier, j'ai le message d'erreur suivant que je ne comprends pas. j'ai beau regarder par rapport à la DTD des fichiers de mapping sur le site d'hibernate, je vois pas pourquoi je me fais renvoyer balader comme ca.
Code:
1 2 3
|
Severity and Description Path Resource Location Creation Time Id
The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,resultset*,(query|sql-query)*)". |
Si quelqu'un peut m'aider la dessus, parce que j'ai du mal à trouver. Merci d'avance :P