私は現在、優れたオブジェクト指向の原則に取り組んでおり、休止状態になっています。プロパティが動的に入力されるこの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>