2015-01-12 2 views
0

내 응용 프로그램은 OpenJPA를 사용하여 Postgres 데이터베이스에 연결합니다. 스키마에서 나는 열에 inet postgres 데이터 유형을 사용하고 있습니다. Java의이 필드는 String입니다. 필드를 올바르게 읽을 수는 있지만 새 행을 삽입하는 데 문제가 있습니다. 원주민 쿼리를 작성OpenJPA에서 inet postgres 데이터 유형 사용

  1. :

    는 인터넷에 검색 나는 세 가지이 작업을 수행하는 솔루션을 발견했다. 이 메서드는 작동하지만, 특정 경우에이 행을 삽입하기 위해 네이티브 쿼리를 작성하면 OpenJPA가 관리하는 쿼리가 많이 생성되어 많은 버그가 발생할 수 있습니다. 이 경우에는 더 적합한 솔루션이 아닙니다.

  2. 이 질문에서와 같이 PostgresDictionary를 생성하십시오 : How to use Postgres inet data type with OpenJPA?. 이 사용자가 설명하는 방법을 정확히 구현했습니다. 사용자 정의 PostgresDictionary를 만들었고 @Column 주석에 columnDefinition을 추가했으며 persistence.xml에 속성을 추가했습니다. 하지만 내 사용자 지정 PostgresDictionary 절대로 호출됩니다. 응용 프로그램을 만들 때 PostgresDictionary는 사용자 정의 대신 org.apache.openjpa.jdbc.sql.PostgresDictionary를 계속 생성합니다.

  3. http://webspherepersistence.blogspot.co.at/2009/04/custom-orm-with-openjpa.html과 같이 맞춤 전략을 구현합니다. 그러나이 전략을 구현하려면 java.sql.Types 클래스 (http://docs.oracle.com/javase/6/docs/api/java/sql/Types.html?is-external=true)에서 열 유형을 설정해야하며이 열에는 inet 유형이 없습니다. Types.OTHER 시도했지만 여전히 열이 형식 inet 및 삽입하려는 값을 varchar (String) 나타내는 동일한 오류가 있습니다.

그래서 누구나 매핑 문제를 해결하는 방법을 알고 있습니까?

답변

0

데이터베이스 속성이 POSTGRESQL로 설정된 org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter 클래스에 의해 openjpa.jdbc.DBDictionary가 초과되어 2 번 지점의 솔루션이 작동하지 않았습니다. org.apache.openjpa.jdbc.sql.PostgresDictionary에 대해 DBDictionary를 persistence.xml 속성에 설정된 값과 별개로 설정합니다.

OpenJpaVendorAdapter에서이 데이터베이스 속성을 삭제하면 내 사용자 정의 PostgresDictionary를 사용할 수있었습니다.

관련 문제