1

J'ai besoin d'un simple exemple d'une mise en veille prolongée d'une entité avec une relation un-à-un avec une autre entité où ils partagent tous deux la clé primaire. Je n'ai besoin que de sauvegarder l'entité principale qui génère automatiquement sa clé primaire et l'autre entité dépendante est enregistrée automatiquement en cascade. Par exemple:Comment cascader enregistrer une correspondance primaire partagée simple clé en hibernate 3.6

public class Person { 
    @Id 
    @GeneratedValue 
    @Column(name = "Id") 
    private Long id; 

    @OneToOne(mappedBy = "person", cascade = CascadeType.ALL) 
    private Name name; 
} 

public class Name { 
    @Id 
    @Column(name = "Id") 
    private Long id; 

    @OneToOne 
    @PrimaryKeyJoinColumn(name = "Id") 
    private Person person; 

    @Column 
    private String first; 
    @Column 
    private String last; 
} 

Person person = new Person(); 
person.setName(new Name("first", "last")); 
session.save(person); 

Nous avons été en mesure de configurer facilement ces 2 entités. Mais nous devons d'abord enregistrer la personne, puis enregistrer le nom via Hibernate. Il est très important que nous ne sauvions que la personne.

Répondre

0

J'ai le même problème. J'ai essayé de déplacer la condition mappedBy vers l'entité "secondaire" en espérant que lorsque l'entité principale sera sauvegardée, elle sauvegardera également cette entité secondaire. L'enregistrement de l'entité principale a généré l'exception suivante (adaptée à l'exemple ci-dessus): org.hibernate.id.IdentifierGenerationException: les ID de cette classe doivent être attribués manuellement avant d'appeler save(): com.my.Name.

Aussi, si je regarde les tables générées par ma configuration, je vois que la table Person a un "nom" FK qui pointe vers l'id de la table Name. Le but de l'utilisation des clés primaires partagées est d'éviter les colonnes FK comme celle-ci.

Donc déplacer le mappedBy vers la table secondaire n'est pas une solution.

Questions connexes