2017-07-01 6 views
0

J'ai la relation suivante avec la personne et la transaction (un pour un dans mon cas). Je veux être en mesure d'enregistrer une personne avec une transaction jointe résultant en deux insertions. Un dans tbl_person et un dans tbl_Transaction. Mais ce qui suit ne génère qu'un insert au lieu de deux. L'un insert est en tbl_Transaction:hibernate un à un mappage des relations, enregistrer seulement insère enfant

`CREATE TABLE `tbl_person` (
    `ID` char(36) NOT NULL, 
    `TransactionID` int(11) DEFAULT NULL, 
    PRIMARY KEY (`ID`), 
    UNIQUE KEY `TransactionID` (`TransactionID`), 
    CONSTRAINT `tbl_person_ibfk_1` FOREIGN KEY (`TransactionID`) 
    REFERENCES `tbl_Transaction` (`TransactionID`) 
); 

CREATE TABLE `tbl_transaction` (
    `TransactionID` int(11) NOT NULL, 
    PRIMARY KEY (`TransactionID`) 
); 

@Table(name="tbl_person") 
@Entity 
@JsonIgnoreProperties(ignoreUnknown = true) 
@ToString 
@Data 
public class Person { 
    @Id 
    @GeneratedValue(generator = "hibernate-uuid") 
    @GenericGenerator(name = "hibernate-uuid", strategy = "uuid2") 
    @Column(name="ID", nullable = false) 
    private String ID; 

    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "transactionId") 
    private Transaction transaction; 
} 

@Table(name="tbl_transaction") 
@Entity 
@Data 
public class Transaction { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer transactionId; 
} 

public class Service() { 
    public void saveTransaction(Transaction transaction) { 
     Person person = new Person(); 
     person.setTransaction(transaction); 
     getSessionCurrent().save(person); 
    } 
} 

`

service.saveTransaction (transaction);

Le service.saveTransaction renvoie sans exception mais il insère uniquement la transaction mais pas la personne. Quelqu'un peut-il me dire ce que je fais de mal?

+0

Votre code ne compilerait pas. Publier un exemple minimal complet reproduisant le problème. –

Répondre

0

vous devez définir un champ @OneToOne dans la transaction classe comme indiqué dans cette question: @OneToOne bidirectional mapping with @JoinColumn

puis ajoutez cette ligne:

transcation.setPerson(person); 
+0

Sur l'objet de domaine Personne, j'ai changé pour utiliser PrimaryKeyJoinColumn pour la transaction de propriété. Obtenir deux inserts maintenant mais dans la base de données pour tbl_person la clé étrangère à la transaction est nulle ... – starcraftOnCrack

+0

@starcraftOnCrack Ce lien est votre réponse: https://stackoverflow.com/a/4028091/1526443 – Mohammad