java - 仅使用 @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 列。
没有创建额外的表。
解决方案
用于
映射依据
是指示框架以启用双向关系。由于事务类上的@ManyToOne,您的事务表将具有引用帐户表主键的外键。默认情况下,Hibernate 根据关系映射属性的名称和主键属性的名称生成外键列的名称。在此示例中,Hibernate 将使用名为 account_id 的列来存储 Account 实体的外键。
@JoinColum
可以使用如果您想覆盖默认外键名称,例如 @JoinColum(name="acc_id")
推荐阅读
- swift - UITextField边框在Swift中指定半径
- cloud-foundry - 部署到 PCF:“1m0s 后超时:健康检查从未通过”
- windows - Move-Item 命令如何在它正在移动的目录中找不到文件?
- java - Checkstyle - 带注释的方法必须在构造函数之前
- bash - 即使 cron 进程正在运行,Cronjob 也无法正常工作
- java - EL表达式只用于方法调用,而忽略方法返回值
- laravel - 关于传递图像数据的 Laravel 问题
- plugins - 列表项,客户 NopCommerce
- android - 在 Edittext 文本更改上更新 recyclerview
- google-apps-script - Google Sheets v3 弃用会影响 AppsScript 中的调用吗?