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:
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:
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:
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é:
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:
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é
Partager