需要区分两个实体之间的关系:Account 和 Transaction

Posted

技术标签:

【中文标题】需要区分两个实体之间的关系:Account 和 Transaction【英文标题】:Need to distinguish relationship between two entities: Account and Transaction 【发布时间】:2019-08-28 14:24:01 【问题描述】:

:)

正如主题中所述 - 我有两个实体,它们是 AccountTransaction 分别。我需要找出它们之间的Relationship 以及它在Java Spring 上下文和Hibernate 中的工作方式。

我很可能会为Account 实体使用下一个字段:

- UUID (as a unique identifier) (Primary Key)
- ownerName
- balance

对于Transaction 实体:

- Id (Primary Key)
- transactionAmount
- transactionEmitter
- transactionReceptor

我考虑过这种关系,Account 可以有多个transactions,而Transaction 至少可以有two accounts 连接? 所以应该是ManyToMany?所以我需要创建一个Jointable 以使其在 Spring 上下文中工作? Jointable 会是什么样子?

感谢任何澄清! :) 祝大家有美好的一天,并提前感谢您的帮助!

保重, 保罗

【问题讨论】:

【参考方案1】:

如果场景说明在两个账户之间进行交易,一种可能的观点是,交易实体可以有一个外键来引用交易中涉及的每个账户。此外,一个帐户可以执行许多事务,并且执行一个涉及两个(或更多,取决于场景)帐户的事务。因此,多对多关系可能是此类场景的最佳描述。 Here is a tutorial 了解如何实现多对多关系。

希望对你有帮助。

【讨论】:

谢谢你的回复,Hugo :) 另外,你会坚持使用 Web 应用程序或控制台应用程序来解决这个问题吗?我对这部分有点不理解,请您澄清一下:交易实体可以有一个外键来引用交易中涉及的每个帐户 一个例子:我们有两个账户,A和B。交易T是从A账户到B账户。假设我们有一个 Transaction 表,其中包含以下字段:transactionID、transactionEmitter 和 transactionReceptor。我们将在 Transaction 表中有一条记录,告诉我们从 A 账户(账户 A 的外键 - transactionEmitter)到 B 账户(账户 B 的外键 - transactionReceptor)进行了交易。 如果我们认为交易只在两个账户之间进行,是的,这两个外键引用表 Account。 好的,我现在看到了。在 Transaction 表中不会有 accountId 外键属性,而是 Emitter 和 Receptor 都是引用 Account.Id 的外键,然后例如在使用 POST 方法创建 Transaction 并传递 JSON 数据时,它会像 "transactionAmount ":50, "transactionEmitter":Account.Id_1, "transactionReceptor":Account.Id_2 根据 Spring JPA 创建类时,可以在 Transaction 类中实现两个变量:transactionEmitter 和 transactionReceptor。这些字段中的每一个都可以与表帐户一对一。也就是说,一个 Transaction 有一个 transactionEmitter 只识别一个和一个帐户,还有一个 transactionReceptor 一个只识别一个和一个帐户。

以上是关于需要区分两个实体之间的关系:Account 和 Transaction的主要内容,如果未能解决你的问题,请参考以下文章

相关实体的子查询的 HQL 错误

实体框架代码优先关系 - 如何定义两个对象之间的关系:两个实体之间的可选一对一

实体之间的核心数据关系

两个 CoreData 实体之间可以有多个“对多”关系吗?

减少对包含实体的 JPQL POJO 的查询次数

如何验证两个实体之间的 OneToMany 关系