2009-03-23 8 views
1

私はHibernate CompositeUserTypeを作成しています。カスタムオブジェクトをJDBCにシリアル化するには、更新しているテーブルの名前を知る必要がありますテーブルに添付された私のツールのためのいくつかの設定)。カスタムHibernateの作成UserType:現在のエンティティテーブルの名前を確認

この作業を今すぐ行うことができる唯一の方法は、冗長でエラーが発生しやすいエンティティtablenameでUserTypeを明示的にパラメータ化することです。

"nullSafeSet"でこの情報を取得する方法はありますか?そうでない場合

public void nullSafeSet(PreparedStatement ps, Object value, int index, 
     SessionImplementor session) 
     throws HibernateException, SQLException { 

    // find out the entity table name here 

、(パラメータが渡される方法に類似)のUserTypeの初期化中に、所有しているエンティティの定義に取得する方法はありますか?

答えて

1

私は、他の設定に基づいて実行時にカスタムタイプのプロパティを設定する必要があったのと似たようなことをしました。コンフィギュレーションを使用して、あなたはこのように動的にプロパティを設定するには、カスタムタイプに取得することができます。

for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) { 
    PersistentClass pc = (PersistentClass)iter.next(); 
    for (Iterator iter2=pc.getPropertyIterator(); iter2.hasNext();) { 
    Property property = (Property)iter2.next(); 
    if (property.getType().getName().equals("your custom type")) { 
     SimpleValue v = (SimpleValue)property.getValue(); 
     v.getTypeParameters().setProperty("table property", pc.getTable().getName()); 
    } 
    } 
} 

を明らかに、ここでの仮定がたくさんあります(エンティティごとに一つのテーブルには、カスタムタイプは単一のプロパティ、などです)しかし、それは動作するはずです。

私が試したことのない別の可能性は、statement.getMetaData()。getTableName(index)のように、nullSafeSetメソッドでPreparedStatementメタデータを使用することです。

関連する問題