Bonsoir,

Alors voila je cherche à faire un appli de visualisation de schéma de bases de données en utilisant Hibernate.

Pour cela j'ai donc 3 entités : Table, Column et Constraint.

Mon problème vient d'une relation ManyToOne entre Constrait et Column :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
IllegalArgumentException occurred while calling setter of gd.app.model.Constraint.column
Voici le fichier de mapping Column (celui pour postgresql) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 19 mars 2012 11:48:49 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
	<class name="gd.app.model.Column">
		<subselect>
			SELECT table_name as table, column_name as name, data_type
			as type
			FROM information_schema.columns
			WHERE table_schema='public'
			ORDER BY ordinal_position ASC
		</subselect>
		<composite-id>
			<key-property name="name" type="java.lang.String"
				column="NAME" />
			<key-many-to-one name="table" class="gd.app.model.Table"
				column="TABLE" />
		</composite-id>
[...........]
 
		<set name="constraints" inverse="true" lazy="true">
			<key>
				<column name="column" />
				<column name="table" />
			</key>
			<one-to-many class="gd.app.model.Constraint" />
		</set>
	</class>
</hibernate-mapping>
Et celui de Constraint :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 19 mars 2012 11:48:49 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
	<class name="gd.app.model.Constraint">
		<subselect>
			SELECT c.constraint_name as name, c.table_name as table,
			c.constraint_type
			as type, cu.column_name as column,
			rc.unique_constraint_name as
			references, cu.table_name as
			references_table
			FROM
			information_schema.table_constraints c
			INNER JOIN
			information_schema.constraint_column_usage cu ON
			(c.constraint_name =
			cu.constraint_name)
			LEFT OUTER JOIN
			information_schema.referential_constraints rc ON
			(c.constraint_name =
			rc.constraint_name)
			WHERE c.constraint_schema='public'
		</subselect>
		<composite-id>
			<key-property name="name" type="java.lang.String"
				column="NAME" />
			<key-many-to-one name="column" class="gd.app.model.Table"
				column="COLUMN" />
		</composite-id>
[...........]
		<many-to-one name="column" class="gd.app.model.Column"
			fetch="join" insert="false" update="false" >
			<column name="COLUMN" />
			<column name="TABLE" />
		</many-to-one>
[...........]
 
	</class>
</hibernate-mapping>
Allez dires moi que vous avez une idée