Неопределенное исключение имени таблицы, даже с набором схем [duplicate]

Для объектов неизменяемых значений, таких как int, строки или даты, идентификация объекта не особенно полезна. Лучше думать о равенстве. Идентификация - это, по сути, деталь реализации объектов значения - поскольку они неизменяемы, нет эффективной разницы между наличием нескольких ссылок на один и тот же объект или несколько объектов.

8
задан Josep Rodríguez López 11 April 2012 в 10:53
поделиться

5 ответов

Из docs :

public class AmbiguousTableNameException extends DataSetException

Это исключение выбрано IDataSet, когда несколько таблиц, имеющих одинаковое имя, доступны. Обычно это происходит, когда соединение с базой данных имеет доступ к нескольким схемам, содержащим идентичные имена таблиц.

Возможные решения:

1) Использовать учетные данные подключения к базе данных, которые имеют доступ только к одной схеме базы данных.

2) Укажите имя схемы для DatabaseConnection или DatabaseDataSourceConnection.

3) Включить поддержку квалифицированного имени таблицы (см. документацию по документации).

12
ответ дан Makoto 19 August 2018 в 00:37
поделиться
  • 1
    Спасибо, я уже решил эту проблему, но это было решением 1, которое вы упомянули. – Josep Rodríguez López 16 April 2012 в 09:15
  • 2
    Я использую spring-dbunit , решение 1) может быть достигнуто установкой системного свойства spring.dbunit.schema . – Bastien Jansen 3 April 2013 в 10:33

Настройка схемы базы данных исправила это для меня:

@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection(final DataSource dataSource){
    final DatabaseDataSourceConnectionFactoryBean connectionFactory = new DatabaseDataSourceConnectionFactoryBean();
    connectionFactory.setDataSource(dataSource);
    connectionFactory.setSchema(DB_SCHEMA);
    return connectionFactory;
}
1
ответ дан knutesten 19 August 2018 в 00:37
поделиться

Для кого использует SpringDBUnit. Я боролся с этой очень раздражающей проблемой. Я решил решить эту проблему, добавив конфигурацию для com.github.springtestdbunit.bean.DatabaseConfigBean и com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean.

Это мой полный весенний контекст для SpringDBUnit

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521/XE" />
        <property name="username" value="xxxx" />
        <property name="password" value="xxxx" />
    </bean>


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="annotatedClasses">
            <list>
                <value>xxx.example.domain.Person</value>
            </list>
        </property>
    </bean>

    <bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
        <property name="skipOracleRecyclebinTables" value="true" />
        <property name="qualifiedTableNames" value="true" />
        <!-- <property name="caseSensitiveTableNames" value="true"/> -->
    </bean>
    <bean id="dbUnitDatabaseConnection"
        class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="databaseConfig" ref="dbUnitDatabaseConfig" />
        <property name="schema" value="<your_schema_name>"/>
    </bean>
4
ответ дан Tung Tran 19 August 2018 в 00:37
поделиться

Вы можете столкнуться с проблемами при импорте данных из Hibernate до запуска DBUnit. В соответствии с используемой базой данных может быть важна оболочка имен таблиц и столбцов.

Например, в HSQL имена баз данных должны быть объявлены в верхнем регистре. Если вы импортируете данные через import.sql Hibernate, убедитесь, что имена таблиц также находятся в верхнем регистре, иначе у вас будет следующая проблема:

  • Hibernate создает таблицы в нижнем регистре
  • DBUnit считывает имена таблиц из БД в нижнем регистре
  • DBUnit пытается импортировать свои наборы данных, используя имена в верхних регистрах таблицы
  • . Вы попали в беспорядок, с неоднозначным исключением.

Не забудьте также проверить, были ли созданы несколько таблиц во время предыдущего запуска (как в верхнем, так и в нижнем регистре), и в этом случае вам тоже нужно его очистить.

0
ответ дан Paul Podgorsek 19 August 2018 в 00:37
поделиться

У меня было такое же AmbiguousTableNameException при выполнении Dbunits aginst Oracle DB. Он работал нормально и начал бросать ошибку в один прекрасный день.

Rootcause: при вызове хранимой процедуры он был изменен по ошибке на нижний регистр. Когда я изменил его на верхний регистр, он смотрел на работу.

Я мог бы решить это, установив имя shema в IDatabaseTester, например iDatabaseTester.setSchema («SCHEMANAMEINCAPS»)

. Также убедитесь, что ваше соединение не имеет доступа ко многим схемам, имеющим одно и то же имя таблицы.

0
ответ дан Smitha Nair 19 August 2018 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: