hibernate-jpa如何在事务中将两个相关对象提交到数据库

时间:2018-07-11 07:43:36

标签: java hibernate jpa

我正在使用hibernate-JPA进行查询。分行使用银行实体的ID,并且我想在一次交易中保留这些实体。您认为这可能吗?

当我执行以下代码时,它给我错误BANK_BANKID未找到。我认为问题是由于未提交BankID而发生的。这意味着您认为我需要两个不同的事务来提交银行,然后获得银行的ID并将其返回给分行,以保留具有银行ID的分行吗?

问候 托尼库克

   EntityManagerFactory emf = Persistence.createEntityManagerFactory("moneyTransfer");
    EntityManager em = emf.createEntityManager();

    EntityTransaction tx = em.getTransaction();
    BankService bankService = new BankServiceImpl();
    BranchService branchService = new BranchServiceImpl();
    Bank bank = bankService.createBank();
    Branch branch = branchService.createBranch(bank);

    tx.begin();
    try {
       em.persist(bank);
        em.persist(user);
        em.persist(branch);

        tx.commit();
    } catch (Exception e) {
        tx.rollback();
    } finally {
        em.close();
        emf.close();
    }

 /* Bank Entity */

 @Entity
public class Bank {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
private long bankId;

@Column
private String bankName;

/*Branch Entity*/
@Entity
public class Branch {

@Id
@GeneratedValue( strategy= GenerationType.IDENTITY )
@Column(updatable = false, nullable = false)
private long branchId;

@Column
private String branchName;

@Column
private String branchAddress;

@Column
private String branchCity;

@Column
private String branchCountry;

@OneToOne
private Bank bank;

SQL:

create table BANK (
bankId          BIGINT                 primary key  auto_increment,
bankName        varchar(255)           not null
);


create table BRANCH (
branchId          BIGINT                 primary key  auto_increment,
branchName            varchar(255)          not null,
branchAddress            varchar(255)       not null,
branchCity            varchar(255)          not null,
branchCountry            varchar(255)       not null,
bankId                BIGINT                not null
);

0 个答案:

没有答案