Spring Jpa Hibernate / sql



我是新手,所以请原谅我的解释和问题本身。如果您对我的方法有任何反馈建议,我将不胜感激。

用户有一个帐户->帐户具有货币列表->货币有名称和余额。

通过研究一些我的UserEntity会看起来像这样:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@OneToOne
@JoinColumn(name = "account_id")
Account account;
2)   
@Id
private Long accountId;
@OneToOne
private UserEntity userEntity;
@ManyToOne
private List<Currency> currencyList;`
3)
@Data
public class Currency 

private final String name;
private final BigDecimal balance;

  1. 如果我不加入列帐户id并将其作为外键,一对一的好处是什么

  2. 正如你在上面看到的,我已经创建了Currency包装器,但只要Currency是一个实体,它就不会让我在那里,Currency在我的情况下必须是一个主体吗?或者我遗漏了什么?如何在数据库中存储的列表。这个想法是能够从账户中提取所有货币。

我想通过从UI发送post请求来实现以下目标银行账户创建

输入:●客户ID●货币清单

输出:●帐户ID●客户ID●余额列表:○可用金额○货币

这种方法还不错。最后,您必须在DB中拥有与表一样多的实体,如果数据模型是关系型的,那么一对一关系是正确的。

关于货币,如果你想把它保存在数据库中,它必须是一个实体。

如果你有这3个实体,当然你可以坚持并恢复它们。但为此,您应该进一步细化实体。例如,双向关系将丢失,正确设置类型关系并设置惰性关系:

账户主体:

@OneToMany(mappedBy="account",fetch=FetchType.LAZY) //Add lazy for performance, 1 Account N currency
private List<Currency> currencyList;`

货币实体:

@ManyToOne(fetch = FetchType.LAZY) //Add lazy for performance, 1 Account N currency
private Account account;

例如,如果您需要插入:

Account a = new Account();
a.set [....]
a.setCurrencyList(new ArrayList<>);
Currency c = new Currency();
c.set [....]
a.getCurrencyList().add(c)

entityManager.persist(a);

为了使级联插入工作,必须将以下条目添加到Account实体的currencyList属性中,因此可以嵌套N个实体。

@OneToMany(mappedBy="account",fetch=FetchType.LAZY, cascade = {CascadeType.PERSIST})

如果您还希望Account实体更新Currency,并且两者之间的关系应建立以下注释:

@OneToMany(orphanRemoval=true ,account="nece",fetch=FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST})

orphanRemove导致如果您从currencyList列表中删除一个Currency实体,它将自动从DB 中删除该Currency主体

您的方法很好,但您必须创建实体并对其进行审查,以便通过其注释充分发挥JPA的潜力。

此外,作为一个提示,不要在请求中发送实体,使用Orika等框架发送带有所需数据的DTO,这是一个安全错误。

最新更新