Hello,
J'ai un souci pour persister une entité qui contient une clé composée, elle même constituée par 2 clés étrangères.
Pour illustrer, j'ai une simple table1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity
@Table(name="TABLE_1")
public class Table1 implements Serializable {
           @Id
	@SequenceGenerator(name="TABLE_1_TABLE1PK_GENERATOR", sequenceName="SEQ_TABLE_1")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TABLE_1_TABLE1PK_GENERATOR")
	@Column(name="TABLE1_PK", unique=true, nullable=false, length=2)
	private String table1Pk;
 
           	@OneToMany(mappedBy="table1", cascade=CascadeType.ALL)
	private List<Table2> tables;
...
}
ma Table3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
@Entity
@Table(name="TABLE_3")
public class Table3 implements Serializable {
	private static final long serialVersionUID = 1L;
 
	@Id
	@SequenceGenerator(name="TABLE_3_TABLE3PK_GENERATOR", sequenceName="SEQ_TABLE_3")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TABLE_3_TABLE3PK_GENERATOR")
	@Column(name="TABLE_3_PK", unique=true, nullable=false, length=2)
	private String table3Pk;
...
}
Et celle que je n'arrive pas à persister:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
@Entity
@Table(name="TABLE_2")
public class Table2 implements Serializable {
	private static final long serialVersionUID = 1L;
 
	@EmbeddedId
	private Table2PK id;
...
}
Et l'id composé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
@Embeddable
public class Table2PK implements Serializable {
	//default serial version id, required for serializable classes.
	private static final long serialVersionUID = 1L;
 
	@Column(name="TABLE1_PK", unique=true, nullable=false, length=20)
	private String table1Pk;
 
	@Column(name="TABLE3_PK", unique=true, nullable=false, length=2)
	private String table3Pk;
...
}
Et je veux persister table1, sauf que j'ai une exception:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: null id generated for:class Table2
Donc, soit j'oublie de setter une valeur dans une des entités, soit je dois d'abord persister table1, puis manuellement, persister table2?
Je vous ai mis une version light de mon code, j'espere que j'ai rien oublié