Unitils / DBUnit / Oracle — как вставить dataset в представления oracle?

#java #oracle #views #dbunit #unitils

#java #Oracle #Вид #dbunit #unitils

Вопрос:

Кажется, это простой вопрос. У меня есть несколько тестов unitils в приложении spring. База данных содержит некоторые представления Oracle, и я просто хочу вставить dataset в эти представления. Я знаю, что можно задать параметры для DBUnit (свойства типа таблицы). Но я ничего не нахожу для unitils.

Существуют ли какие-либо свойства unitils для вставки dataset в представления?

Спасибо за помощь

Комментарии:

1. Вставки могут выполняться только в «простых» представлениях (представлениях, основанных только на одной таблице). Вы не можете вставлять записи в представления, которые являются результатами объединений в нескольких таблицах. Первое, что вам нужно сделать, это определить, можете ли вы вставить в представление.

2. Вероятно, вы хотите добавить данные в таблицы, которые фактически используются для создания представлений…

3. Ну, представления созданы для переключения на другой набор таблиц в БД без изменения кода Java…

4. Возможно, для вашей организации было бы неплохо внедрить надлежащий уровень DAO, чтобы изменения в базе данных не так сильно влияли на ваш проект в будущем?

Ответ №1:

Хорошо, я думаю, я нашел способ настроить unitils. Но для этого нужен некоторый Java-код. Я протестировал это решение, кажется, оно работает.

Сначала я нахожу некоторые свойства в unitils (unitils.properties):

 unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule
unitils.module.dbunit.runAfter=
unitils.module.dbunit.enabled=true
  

Итак, кажется, можно переопределить DBUnitModule следующим образом


 public class DbUnitModule extends org.unitils.dbunit.DbUnitModule implements Module {
    /*
     * (non-Javadoc)
     * 
     * @see org.unitils.dbunit.DbUnitModule#getDbUnitDatabaseConnection(java.lang.String)
     */
    @Override
    public DbUnitDatabaseConnection getDbUnitDatabaseConnection(final String schemaName) {
        DbUnitDatabaseConnection dbConnection = super.getDbUnitDatabaseConnection(schemaName);
        dbConnection.getConfig().setProperty("http://www.dbunit.org/properties/tableType", new String[] { "VIEW", "TABLE" });
        return dbConnection;
    }
}
  

А затем измените конфигурацию в unitils.properties.

Комментарии:

1. только : unitils.module.dbunit.className=your.package. YourClassExtendsDbUnitМодуль