복붙노트

[SPRING] JDBC 유형에 대한 Dialect 매핑이 없습니다 : 1111

SPRING

JDBC 유형에 대한 Dialect 매핑이 없습니다 : 1111

Spring JPA Application에서 데이터베이스로 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

통합 테스트를 수행 할 때 스프링은 제대로 시작되지만 최대 절전 모드 SessionFactory 생성시 실패합니다. 단, 예외는 있습니다.

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

나는 내 방언이 Mysql5Dialect 여야한다고 생각한다. 또한 명시 적으로 InnoDB와 버전 5를 나타내지 않는 두 가지 dialect 옵션을 시도했다. 그러나 나는 항상 같은 'JDBC 유형에 대한 Dialect 매핑 없음 : 1111'메시지로 끝난다. . 내 application.properties 파일은 test / resources 소스 폴더에 있습니다. JUnit Test 주자 (이전에 오타가 있었으므로 예외가 있음)가 인식합니다.

내가 설정 한 속성이 잘못 되었습니까? 이 속성 이름에 대한 공식 문서를 찾을 수는 없지만이 stackoverflow 응답에 힌트가 있습니다. https://stackoverflow.com/a/25941616/1735497

당신의 답변을 기다리고 있습니다, 감사합니다!

BTW 응용 프로그램이 이미 스프링 부팅을 사용하고 있습니다.

해결법

  1. ==============================

    1.SubOptimal의 주석을 기반으로 한 대답은 다음과 같습니다.

    SubOptimal의 주석을 기반으로 한 대답은 다음과 같습니다.

    오류 메시지는 실제로 하나의 열 유형을 최대 절전 모드로 데이터베이스 유형에 매핑 할 수 없다고 말합니다. 필자의 경우에는 일부 엔티티에서 기본 키로 사용하는 java.util.UUID 유형이었습니다. @Type (type = "pg-uuid")에 대한 주석 @Type (type = "uuid-char")을 적용하기 만하면됩니다.

  2. ==============================

    2.이 예외를 던지는 또 다른 일반적인 유스 케이스가있다. void를 반환하는 함수를 호출합니다. 더 많은 정보와 솔루션을 보려면 여기를 클릭하십시오.

    이 예외를 던지는 또 다른 일반적인 유스 케이스가있다. void를 반환하는 함수를 호출합니다. 더 많은 정보와 솔루션을 보려면 여기를 클릭하십시오.

  3. ==============================

    3.일부 열 반환 많은 경우 Query에서 알 수없는 형식이 있는지 확인하십시오.

    일부 열 반환 많은 경우 Query에서 알 수없는 형식이 있는지 확인하십시오.

    예 : column_name이 유형을 알 수 없으므로 '1'

    column_name은 Integer가 1이므로 올바른 것입니다.

    이 일은 나를 위해 일했다.

  4. ==============================

    4.때로는 SQL 프로 시저 / 함수를 호출 할 때 뭔가 반환해야 할 수도 있습니다. void를 반환 해 볼 수 있습니다 : RETURN; 또는 문자열 (이것은 나를 위해 일했다) : 반환 '확인'

    때로는 SQL 프로 시저 / 함수를 호출 할 때 뭔가 반환해야 할 수도 있습니다. void를 반환 해 볼 수 있습니다 : RETURN; 또는 문자열 (이것은 나를 위해 일했다) : 반환 '확인'

  5. ==============================

    5.내 쿼리에서 UUID 열을 반환했기 때문에 동일한 오류가 발생했습니다. "캐스팅 (columnName as varchar)"과 같은 쿼리를 통해 UUID 열을 varchar 유형으로 반환 한 것을 수정하려면 문제가 해결되었습니다.

    내 쿼리에서 UUID 열을 반환했기 때문에 동일한 오류가 발생했습니다. "캐스팅 (columnName as varchar)"과 같은 쿼리를 통해 UUID 열을 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();
        }
    }
    
  6. ==============================

    6.오래된 hibernate (3.x) 버전으로이 에러를 얻는 사람은 :

    오래된 hibernate (3.x) 버전으로이 에러를 얻는 사람은 :

    반환 유형을 대문자로 쓰지 마십시오. Hibernate 타입 구현 매핑은 소문자 리턴 타입을 사용하고 그것들을 변환하지 않는다 :

    CREATE OR REPLACE FUNCTION do_something(param varchar)
        RETURNS integer AS
    $BODY$
    ...
    
  7. ==============================

    7.제 경우에는 문제가 생겼습니다. 사용자 클래스에 저장된 프로 시저를 설정할 때 resultClasses 특성을 추가하는 것을 잊었습니다.

    제 경우에는 문제가 생겼습니다. 사용자 클래스에 저장된 프로 시저를 설정할 때 resultClasses 특성을 추가하는 것을 잊었습니다.

    @NamedStoredProcedureQuery(name = "find_email",
                    procedureName = "find_email", resultClasses = User.class, //<--I forgot that. 
                    parameters = {
                        @StoredProcedureParameter(mode = ParameterMode.IN, name = "param_email", type = String.class)
                    }),
    
  8. from https://stackoverflow.com/questions/28192547/no-dialect-mapping-for-jdbc-type-1111 by cc-by-sa and MIT license