hibernate HiLo - одна таблица для всех сущностей - PullRequest
0 голосов
/ 07 марта 2012

Я видел этот вопрос

NHibernate HiLo - одна таблица для всех сущностей

, и поэтому я прочитал

http://daniel.wertheim.se/2011/03/08/nhibernate-custom-id-generator/

и я попытался сделать это в спящем режиме.hibernate не проверяет ключ "где" в hashmap свойств, поэтому я пытаюсь переопределить функцию configure самостоятельно, но не могу прочитать или обновить значение.

Есть ли готовое решение для этого?мой код ниже.

@Override
public void configure(Type type, Properties params, Dialect dialect)
{
    tableName="myTableNameForHiloValues"; //hardcoded
    columnName="NextHiValue";//the column that holds the next hi value
    String schemaName = params.getProperty(SCHEMA);
    String catalogName = params.getProperty(CATALOG);

    tableName = Table.qualify( catalogName, schemaName, tableName );

    query = "select " + columnName +
            " from " //+ dialect.appendLockHint(LockMode.UPGRADE, tableName) +      
              dialect.getForUpdateString() +
            " where EntityName='"+params.getProperty("target_table")+"'"
              //here i give the entity that i want to use
            ;

    update = "update " + tableName +
             " set " + columnName + " = ? "+
             " where " + columnName + " = ?"+
             " and EntityName='"+params.getProperty("target_table")+"'"
             ;
}

структура таблицы myTableNameForHiloValues ​​выглядит следующим образом:

EntityName |NextHiValue

1 Ответ

1 голос
/ 09 марта 2012

Мне удалось сделать то, что я хочу, не со строкой в ​​таблице, а со столбцом в таблице.

Это выглядит так: на моем myHiloTable один столбец на объект, который я хочу использовать hilo для генерации идентификаторов. так что это будет таблица с одной строкой и множеством столбцов.

myHiloTable:

entity1 | entity2 | entity3

и пример конфигурации для entity2:

<id name="whateverYourIdNameIs" type="java.lang.Integer">
        <column name="whateverYourColumnNameIs" />           
        <generator class="hilo">
            <param name="table">myHiloTable</param> //tablename is same for all entities
            <param name="column">entity2</param>  //column name changes for entity
        </generator>
</id>
...