gpt4 book ai didi

java - 当只有类型很重要时,在 JPA 中保留成员变量

转载 作者:行者123 更新时间:2023-12-01 14:41:41 28 4
gpt4 key购买 nike

问题:当只有字段的类型很重要时如何存储字段。

描述:我简化了问题描述以突出显示该问题。 Dragon 类有一个行为 Roar,它存储为成员变量。 Roar 通常没有状态,不需要保存。然而,Dragon 需要知道它在重新创建时具有什么特定类型的 Roar

@Entity
public class Dragon implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private double height;
private Roar roar;

public String roar() {
return roar.roar();
}
}

public interface Roar {
String roar();
}

public class QuietRoar implements Roar {
public String roar() {
return "grr.."; // In real scenario, lots of logic occurs here.
}

public class LoudRoar implements Roar {
public String roar() {
return "AHHHGRRRR"; // More logic here.
}

可能的解决方案:使 roar 字段变为 transient ,并存储一个 Class 类型的附加字段,该字段保存 roar 字段的类类型。然后,Dragon 类变为:

@Entity
public class Dragon implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private double height;
@Transient
private Roar roar;
private Class<? extends Roar> roarType;

public void setRoar(Roar roar) {
this.roar = roar;
roarType = roar.getClass();
}

public String roar() {
if(roar == null) {
try {
roar = roarType.newInstance();
} catch (InstantiationException | IllegalAccessException ex ) {
// oo ohh..
}
}
return roar.roar();
}
}

最佳答案

如果您使用 EclipseLink,则可以使用转换器来实现此目的。

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm#CHDEHJEB

具体来说,您可以使用 ClassInstanceConverter 将类的名称存储在列中。

JPA 2.1 还将定义转换器概念。

关于java - 当只有类型很重要时,在 JPA 中保留成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15891205/

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