首页 > 解决方案 > 仅使用 @mappedBy ,不使用@JoinColumn - 在 OneToMany 关系中创建的连接列,那么 JoinColumn 的用途是什么?

问题描述

我是休眠的新手。我与 Account 和 Transaction 之间的双向映射有 OneToMany 关系。我没有在任何一个类中使用 @JoinColumn 并在非拥有 Account 类中使用 @mappedBy。一切正常。使用内存数据库中的 H2,在 Transaction 表中创建新的连接列。那么在 OneToMany 关系中@JoinColumn 有什么用——它只用于单向映射吗?下面是代码。我还阅读了使用 JPA @OneToMany 关联时 @JoinColumn 和 mappedBy 之间的区别是什么以供参考

  public class Account {
        @OneToMany( mappedBy="account", cascade=CascadeType.ALL)
        List<Transaction> list= new ArrayList<Transaction>();
    }

    public class Transaction {

        @ManyToOne
        Account account;
    }

应用类:

        Account a = new Account("savings");

        Transaction t1 = new Transaction("shoe purchase", 45);

        t1.setAccount(a);

        a.getList().add(t1);

        accountRepository.save(a);

输出:

交易表有一个外键条目,它是帐户表中那一行的帐号。在 Transaction 表中创建的 ACCOUNT_ID 列。

没有创建额外的表。

标签: javahibernatejpa

解决方案


用于

映射依据

是指示框架以启用双向关系。由于事务类上的@ManyToOne,您的事务表将具有引用帐户表主键的外键。默认情况下,Hibernate 根据关系映射属性的名称和主键属性的名称生成外键列的名称。在此示例中,Hibernate 将使用名为 account_id 的列来存储 Account 实体的外键。

@JoinColum

可以使用如果您想覆盖默认外键名称,例如 @JoinColum(name="acc_id")


推荐阅读