Java 银行数据库:关系的正确定义?
我正在用Spring Boot和Spring Data JPA构建一个银行应用程序,在其中定义BankAccount类与BankTransfer类之间的关系时遇到了一些问题,我无法找到解决方案。银行账户有一个转账列表Java 银行数据库:关系的正确定义?,java,hibernate,jpa,Java,Hibernate,Jpa,我正在用Spring Boot和Spring Data JPA构建一个银行应用程序,在其中定义BankAccount类与BankTransfer类之间的关系时遇到了一些问题,我无法找到解决方案。银行账户有一个转账列表列表转账。所以这里的关系被定义为@OneToMany。但在每一笔银行转账中,我都有两个银行账户,分别称为“发送方”和“接收方”。发送方是从中提取金额的账户,接收方是添加金额的账户 因此,每个银行转账都必须与BankAccount类具有@ManyToOne关系(该关系正好是二对一关系)
列表转账
。所以这里的关系被定义为@OneToMany。但在每一笔银行转账中,我都有两个银行账户,分别称为“发送方”和“接收方”。发送方是从中提取金额的账户,接收方是添加金额的账户
因此,每个银行转账都必须与BankAccount类具有@ManyToOne关系(该关系正好是二对一关系)。因此,这里的困难在于如何映射两个银行帐户(发送方和接收方)?在BankAccount类的@OneToMany注释中将什么设置为mappedBy字段
以下是我的课程:
银行账户类别:
@Entity
@Table(name = "bank_account")
public class BankAccount {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "account_Sequence")
@SequenceGenerator(name = "account_Sequeence", sequenceName = "BANK_ACCOUNT_SEQ")
@Column(name ="id")
private Long id;
@NotNull
@Column(name ="account_number")
private String accountNumber;
@NotNull
@Enumerated
@Column(name ="type")
private AccountType type;
@Column(name ="currency")
private Currency currency;
@NotNull
@Column(name ="balance")
private BigDecimal balance;
@NotNull
@Column(name ="date_created")
protected Date dateCreated;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name="client_id")
protected Client client;
@Column(name ="employee_id")
private Employee accountManager;
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "sender",
cascade = {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
protected List<BankTransfer> transfers;
}
如你所见,我有:
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "sender",
cascade = {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
protected List<BankTransfer> transfers;
我还想映射BankTransfer类中的BankAccountReceiver
字段。例如,我试过:
mappedBy = {"sender", "receiver"},
或者尝试添加2@OneToMany注释,但这些似乎是错误的
你能帮我解决这个问题吗。也许我需要以某种方式分别重新定义实体和oracle数据库表。我对RDBMS比较陌生,我构建这个应用程序是为了获得更多的经验。这取决于您如何填充这些实体上的数据。 如果创建新数据库,则可以创建
联接表
并使用@OneToMany
通常在像您这样的情况下,我只在
银行转账
端使用关联,因此您可以从银行账户
中删除转账,尤其是您有延迟关系。从实体银行账户转账
您可以通过sql、jpa等实现。您不需要实体中的字段您需要将转账分为ReceivedTransfer和SendTransfer。关系可以是单向的,双向的不受欢迎。谢谢您,我按照您的建议做了-只在银行转账上使用了关系,效果很好。
@NotNull
@ManyToOne(targetEntity = BankAccount.class,
fetch = FetchType.LAZY,
cascade = {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name = "sender_id")
private BankAccount sender;
mappedBy = {"sender", "receiver"},