我目前正在使用良好的面向对象原则,并且休眠时,我有这个 POJO,其中的属性将被动态填充。这是我为优秀的面向对象设计读过的一种设计模式,在这种设计模式中,可以很容易地将属性添加到特定对象而不会破坏应用程序。我的问题是,如何将其映射到表中,当您的属性应该是动态的时,我使用枚举来限制映射的键值对,但理想情况下它仍然可以增长。我只使用内存数据库 (h2),我不会将代码用于生产用途。这仅用于学习目的。见下面的代码:
public class Transaction {
private static Map<Object, Object> properties;
public Transaction(){
if(null != properties)
properties = new LinkedHashMap<Object, Object>();
}
public Transaction(Map<Object, Object> properties){
if(null != properties)
setProperties(properties);
}
public void setProperties(Map<Object, Object> prop){
properties = prop;
}
public void setProperties(Properties property, String value){
properties.put(property, value);
}
public Map<Object, Object> getProperties(){
return properties;
}
public String getProperties(Properties property){
return (String) properties.get(property);
}
}
所以我希望能够动态地创建一个具有此属性的表,即 My Enum:
public enum Properties {
Entry("Entry"), Id("Entry_ID"), Name("Name"), Credit("Credit");
private final String description;
private Properties(final String description){
this.description = description;
}
@Override
public String toString(){
return description;
}
}
我有这个休眠映射,但是正如您所看到的,每次更新字段时都需要更新它,我需要一个通用映射,这样当我更改/添加属性时,注释或 xml 就可以了,见下文:
<class name="Transaction" table="TRANSACTION">
<id name="id" column="ENTRY_ID">
<generator class="increment"/>
</id>
<property name="name"/>
<property name="credit" type="boolean" column="IS_CREDIT"/>
</class>