je la situation suivante:Comment mapper des identités dérivées dans hibernate 3?
@Entity
class A{
@Id
@SequenceGenerator(name = "SEQ_AID", sequenceName = "SEQ_AID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AID")
private Long aId;
@OneToOne(fetch=FecthType.LAZY,optional=false,cascade=CascadeType.ALL)
private B b;
...
}
@Entity
class B{
@Id
private A a;
...
}
En d'autres termes: Il existe une association OneToOne entre A et B. B est une entité faible, et son identifiant est dérivé de la classe A.
Je Nous avons déjà testé certaines solutions en ajoutant @PrimaryKeyJoinColumn sous @OneToOne comme dans les mentions article. Mais j'ai eu cette erreur: "org.hibernate.id.IdentifierGenerationException: les identifiants de cette classe doivent être assignés manuellement avant d'appeler save(): B"
Je ne sais pas si c'est pertinent dans ce cas, mais j'utilise Oracle 11g.
MISE À JOUR
Je pense que je suis dans le droit chemin. Voici l'état actuel de mon problème:
@Entity
class A{
@Id
@SequenceGenerator(name = "SEQ_AID", sequenceName = "SEQ_AID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AID")
private Long aId;
@OneToOne(fetch=FecthType.LAZY,optional=false,cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn(name="aId")
private B b;
...
}
@Entity
class B{
@Id
@OneToOne
@JoinColumn(name="aId)
private A a;
...
}
L'erreur est maintenant un peu différent:
java.sql.SQLException: ORA-00904: "B"."A": invalid identifier
Il tente de trouver la colonne A (au lieu de l'AID) dans le tableau B. I ne sais pas comment spécifier que le nom de la colonne est B.AID et non BA
Si vous utilisez Hibernate 3.5, cela peut aider: http://stackoverflow.com/questions/ 4027623/how-do-i-correctement-cascade-save-a-one-to-one-bidirectionnel-relationship-on-primar – axtavt