it-swarm.com.ru

Нет отображения диалекта для типа JDBC: 1111

Я работаю над приложением Spring JPA, используя MySQL в качестве базы данных. Я гарантировал, что все библиотеки spring-jpa, hibernate и mysql-connector-Java загружены.

Я использую экземпляр mysql 5. Вот выдержка из моего файла application.properties:

spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

spring.datasource.url=jdbc:mysql://localhost/mydatabase
spring.datasource.username=myuser
spring.datasource.password=SUPERSECRET
spring.datasource.driverClassName=com.mysql.jdbc.Driver

При выполнении интеграционного теста Spring запускается правильно, но не может создать hibernate SessionFactory, за исключением:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

Я думаю, что мои диалекты должны быть Mysql5Dialect, я также попробовал тот, который явно указывает InnoDB, и два варианта диалекта, которые не указывают версию 5. Но я всегда получаю одно и то же сообщение «Нет диалектного отображения для типа JDBC: 1111» . Мой файл application.properties находится в исходной папке test/resources. Он распознается бегуном JUnit Test (ранее я получал исключение из-за опечатки в нем).

Свойства, которые я устанавливаю неправильно? Я не смог найти официальную документацию по этим именам свойств, но нашел подсказку в этом ответе stackoverflow: https://stackoverflow.com/a/25941616/1735497

Ждем ваших ответов, спасибо!

Кстати, приложение уже использует весеннюю загрузку.

15
SakeSushiBig

Вот ответ, основанный на комментарии от SubOptimal:

Сообщение об ошибке фактически говорит о том, что один тип столбца не может быть сопоставлен с типом базы данных с помощью hibernate . В моем случае это был тип Java.util.UUID, который я использую в качестве первичного ключа в некоторых моих сущностях. Просто примените аннотацию @Type(type="uuid-char") (для postgres @Type(type="pg-uuid"))

13
SakeSushiBig

Пожалуйста, проверьте, если некоторые столбцы возвращают многие, имеют неизвестный тип в запросе.

например: '1' в качестве имени столбца может иметь тип неизвестный 

и 1, поскольку column_name является целым числом является правильным Один.

Эта вещь работала для меня.

7
jaskirat Singh

Существует также другой распространенный сценарий использования этого исключения. Вызов функции, которая возвращает void. Для получения дополнительной информации и решения перейдите здесь .

7
icl7126

Иногда при вызове процедуры/функции sql может потребоваться что-то вернуть. Вы можете попробовать вернуть void: RETURN; или строку (этот работал для меня): RETURN 'OK'

3
Klapsa2503

Я получил ту же ошибку, потому что мой запрос возвратил столбец UUID. Чтобы исправить это, я возвратил столбец UUID как тип varchar через запрос типа «cast (columnName as varchar)», затем он сработал. 

Пример:

public interface StudRepository extends JpaRepository<Mark, UUID> {

    @Modifying
    @Query(value = "SELECT Cast(stuid as varchar) id, SUM(marks) as marks FROM studs where group by stuid", nativeQuery = true)
    List<Student> findMarkGroupByStuid();

    public static interface Student(){
        private String getId();
        private String getMarks();
    }
}
1
Ramya

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

@NamedStoredProcedureQuery(name = "find_email",
                procedureName = "find_email", resultClasses = User.class, //<--I forgot that. 
                parameters = {
                    @StoredProcedureParameter(mode = ParameterMode.IN, name = "param_email", type = String.class)
                }),
0
GaborH

Для тех, кто получает эту ошибку со старой версией Hibernate (3.x):

не пишите тип возврата заглавными буквами. Отображение реализации типа hibernate использует возвращаемые строчные буквы и не преобразует их:

CREATE OR REPLACE FUNCTION do_something(param varchar)
    RETURNS integer AS
$BODY$
...
0
Anubis