gpt4 book ai didi

java - 使用 Hibernate 在 J2EE 应用程序中存储全局数据的最佳实践

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

我正在寻找使用 Hibernate 存储 Java EE 应用程序全局数据的最佳解决方案。它将由键值对组成。示例:

projectStarted = "10-11-11"
developerNumber = 3
teamLeader = "John"

如您所见,所有这些条目都有不同的类型。

现在我看到两个选择:

1) 创建 GlobalData 实体。它的每个字段将表示为表中唯一的列,并将包含唯一的设置。这样我就不会遇到类型转换的问题,但我想避免它,以防存在大量设置。

2) 创 build 置实体。每个它都包含两个字段:键(主键)和值,并将在表中表示为唯一记录。这是更好的解决方案,但在我看来,我会得到很多类型转换,因为设置可以是任何类型。

所以基本上,我正在寻找实现第二个解决方案的方法,而不会因为不同类型而遇到很多麻烦。有人可以帮助我吗?

谢谢。

编辑 1。

是的,谢谢克里斯蒂安。刚刚有了类似的想法。

如果我有设置实体怎么办,如下所示:

@Entity
@Table(name = "settings")
public class Setting {

@Column
private String key;
@Column
private String value;
@Column
private String converterClassFullName; //example by.lugovsky.MyConverter

//Getters, setters
}

和 GlobalData 类。

public class GlobalData {
private Date projectStarted;

private int developerNumber;

private String teamLeader;

Set<Setting> settings;

//Getters and setters for all, except settings.

}

所以基本上我的想法是在持久/更新/等之前转换设置实体。我可以在我的 DAO 中执行此操作,但我想知道,是否也可以使用 @Entity 注释来注释 GlobalData 类而不创建新表。这样我就可以将OneToMany注释设置为Setting的集合并在内部@PrePersist等方法中执行转换。

Hibernate 允许我这样做吗?

再次感谢

最佳答案

您可以将转换器类存储到数据库中,并让它在使用该值之前运行属性的给定转换器。 JSF 提供 Converter API:

public interface Converter{
public Object getAsObject(FacesContext fc, UIComponent component, String value) throws ConverterException;

public String getAsString(FacesContext fc, UIComponent component, Object obj) throws ConverterException;
}

如果您有一个架构

名称:字符串

值:字符串

转换器:类

那么你可以这样做:

PropertyEntry pe = // Get from OR-Mapper
Converter c = (Converter) pe.getConverter().newInstance();
Object o = c.getAsObject(null, null, pe.getValue());
// use the object o instead of value

为了更酷,您还可以在类中定义一个不会持久化的字段,您可以使用它来保存对象内转换后的值。

关于java - 使用 Hibernate 在 J2EE 应用程序中存储全局数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6925026/

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