我正在构建一个Spring Boot微服务,并且正在使用实体构建数据访问层。我想将1个实体Transactions
映射到2个表。第一个表“交易”将具有transaction_id。第二个表还将使用相同的transaction_id作为其主键以及其他属性。最简单的方法是什么?
换句话说:
@Entity
class Transactions {
@Id
private Long transactionId;
??@OneToMany?? ( <--what do I put here?)
private List<Groceryitem> items;
}
第一个表将存储长交易ID和GroceryItem
的列表,如下所示:
Table: transactions
______________________
| |
| transactionId: Long |
| |
| List<GroceryItem> |
|______________________|
基本上使第一个表如下所示:
transcation_id |
--------------------
1
2
杂货项目是一个包含字段Float price
的类,如下所示:
class GroceryItem {
private String itemName;
private Float price;
Float getPrice() {
return this.price;
}
String getName() {
return this.itemName;
}
}
我想将杂货项目列表存储在第二个表中,并使用相同的transactionId
作为第二个表的主键。我还希望将来能够扩展“杂货店商品”以包含更多属性。
Table: items
______________________
| |
| transactionId: Float |
| |
| List<GroceryItem> |
| |
| name: String |
|______________________|
第二张表如下所示:
transaction_id | name | price
------------------------------------------
1 carrot 15.00
1 apple 13.99
2 apple 3.00
如何正确注释交易和杂货项目类?
答案 0 :(得分:0)
在您的情况下,一个好的解决方案是使用单向关系“一对多”,其中在Transaction类中具有GroceryItem的列表。您可以按以下方式进行操作:
@Entity
public Transaction {
...
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "transaction_id")
private List<GroceryItem> items = new ArrayList<>();
...
}
和
@Entity
public class GroceryItem {
...
}
如果您具有一对一的关系,例如交易+交易明细。您可以考虑@SecondaryTable,其中实体的一部分可以存储在一个表中(TRANSACTION),第二部分可以存储在第二个表中(TRANSACTION_DETAILS)