gpt4 book ai didi

java - 如何使用 JPA 保留枚举?

转载 作者:可可西里 更新时间:2023-11-01 08:59:52 25 4
gpt4 key购买 nike

我正在使用 MySQL 和 JPA。

我有一个枚举,它有自己的表。

我在使用此枚举的实体 (entity1) 中有一个字段。此字段注释为:@Enumeration(EnumType.STRING)

1 - 当 entity1 有自己的表时,将此字段作为数据库中的一列保留在 entity1 中是否正确?

2 - 如果我在我的其他字段上使用 @JsonProperty 并且对 1 的回答是"is",我是否也必须在枚举字段上使用 @JsonProperty

3 - 将枚举放在单独的表中有什么意义?

目前,只有 @Enumeration 注释和一个用于 entity1 枚举的列,我得到错误:was annotated as enumerated, but its java type is not an enum

最佳答案

1- 我是如何解决类似问题的:

我在单独的实体中定义了枚举:

@Entity
@Table(name="CALC_METHOD")
public class CalculationMethod {


public CalculationMethod() {
super();
// TODO Auto-generated constructor stub
}


@Id
@Enumerated(EnumType.STRING)
@Column(name="METHOD_NAME")
private CalculationMethodId calcMethodID;

@Column(name="DISPLAY_TEXT")
private String displayName;
.
.
.
.

然后我在另一个实体中引用它如下:

@OneToOne
@JoinColumn(name="CALCULATION_METHOD",referencedColumnName="METHOD_NAME")
private CalculationMethod calculationMethod;

这样它存储在一个单独的表中,但从另一个实体引用而没有重复......这里的要点是你不能映射枚举范围的变量所以当我需要存储枚举值的显示名称时,如您所见,我需要将其设为单独的属性

3- 为什么要存储在表中?因为从 java POV 来看,它实际上是一个 enum ,我想多态地应用一些计算方法(比如使用计算方法计算引用实体中的一些值,所以我为每个定义了 calculate() 方法计算方法,每个都有不同的实现然后在计算一个整体时调用它)我希望它总是从代码中的许多地方读取相同的值和显示名称,如果我想修改显示名称,就完成了只有@一个地方——因此一致性和可维护性——

2- 这取决于需求和你的 json 模型

关于java - 如何使用 JPA 保留枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48732637/

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