2009-05-09 20 views
0

さて、私は私が持っていたものを引き裂き、それを再建しています、ここで私がする必要があるものです。ハイバネートマッピングの問題に助けてください...リードしてください! :)

私はプロパティと呼ばれるエンティティを持っています:

文字列名;

@ManyToOne エンティティタイプ。

???????値

値も保存する必要がありますが、型によっては値がString、Double、または別のオブジェクト(Class.getJavaClass()クラス)へのリンクになります。

私はこれをあらゆる方法で継承していますが、新しいProperty()を実行して、適切な種類のTypeが選択されると、Typeが選択されるまで値をnullに設定する必要があります。

値は型オブジェクト(これはString、Double、type.getJavaClass()のどちらかを入れることができますが、休止状態にすることはできません):(

これを実現するための良い方法上の任意のアイデアや提案をいただければ幸いです! おかげで、 ジョシュア

答えて

0

は問題はHibernateがそうオブジェクトの種類は本当にないのデータベースにマッピングできるようにする必要があります

String型の値を作ることをお勧めします。次にw終了呼び出し元が認識しないように "get"と "set"呼び出しをラップします。例:

public class Property 
{ 

String name; 

Enum Type; 
String valueString; 




public object getValue() 
{ 
    if(getType() == Long) 
    { 

    return Long.valueOf(getStringValue()); 
    } 

    if(getType() == String) 
    { 
     return valueString; 
    } 

    ..... 

} 

public void setValue(obj) 
{ 
    if(obj instanceof Long) 
    { 
    setStringValue(obj.toString()) 
     setType(Long) 
    } 
    .... 

} 

} 

別のオブジェクトへのリンクは、別のテーブルへのリンクを意味していますか?この場合、データベースごとに参照整合性を維持できるように、おそらく各テーブルごとに別々の列を作成します。次に、適切なエンティティを取得するためにgetValue()、setValue()を拡張することができます。

+0

はい、非常に良い、それは私が場所に混乱していることです、getTextValue()とgetNumericalValue()とgetEntityValue()はすべてValueTypeから継承されています。 私は、このすべての継承が物事を入れている1つの巨大なテーブルでperformaceの問題が表示されないことを願っていますが、それは確かに美しいです。 ありがとう!ジョシュア –

関連する問題