gpt4 book ai didi

spring - JPA - 保存后自动生成的字段为空

转载 作者:行者123 更新时间:2023-12-01 03:18:19 24 4
gpt4 key购买 nike

我有一个 Account实体,我正在尝试使用 save 保留它功能。我的代码:

@Override
public Account createAccount(String pin) {

Account account = new Account();
account.setBalance(0L);
account.setPin(pin);

return accountRepository.save(account);

}

现在我的实体类有一个名为 accountNumber 的自动生成字段.我的实体类:
@Entity
@Table(name = "accounts")
@Data
public class Account {

@Column(name = "account_number", length = 32, insertable = false)
private String accountNumber;

private Long balance;


}

现在打电话后 save ,返回的实体有 accountNumbernull但我可以在 intellij 数据库 View 中看到它实际上不为空。所有其他自动生成的字段,如 id等在返回的实体中只有 accountNumber一片空白。 accountNumber 的默认值在 sql 文件中设置:
ALTER TABLE accounts
ALTER COLUMN account_number SET DEFAULT DefaultValueSerializer(TRUE, TRUE, 12);

在这里, DefaultValueSerializer是生成帐号的函数。

我已经尝试过其他可用的解决方案,例如使用 saveAndFlush()等等,在我的情况下没有任何效果。有什么问题?

最佳答案

正如评论中提到的,Hibernate 不知道数据库引擎级别发生了什么,因此它看不到生成的值。

将帐号的生成移动到 JPA 级别而不是使用数据库默认值是明智的。

建议你研究注解@GeneratedValue和相关的东西,如 @SequenceGenerator .这样生成账号的控制是在JPA级别的,保存后不需要刷新实体之类的东西。

一起点:Java - JPA - Generators - @SequenceGenerator

对于非 id 字段,可以在用 @PrePersist 注释的方法中生成值。正如其他答案所暗示的那样,但您可以在 Account 中进行初始化s 构造函数。

另见 this answer对于选项。

关于spring - JPA - 保存后自动生成的字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47568494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com