hibernate一对一关系映射,只保存插入子

时间:2017-07-01 07:05:15

标签: java hibernate hibernate-mapping sql-insert one-to-one

我与人和交易有以下关系(在我的情况下是一对一的)。我希望能够保存附加了交易的人员,从而产生两个插入。一个在tbl_person中,另一个在tbl_Transaction中。但以下只生成一个插入而不是两个插入。一个插入位于tbl_Transaction:

`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(事务);

service.saveTransaction返回时没有异常,但它只插入事务而不是人。

任何人都能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您需要在Transaction类中定义@OneToOne字段 喜欢这个问题: @OneToOne bidirectional mapping with @JoinColumn

然后添加以下行:

transcation.setPerson(person);