우리 프로젝트는 Oracle과 Postgres Dbs를 모두 지원해야합니다. 그리고이 목록에 더 많은 데이터베이스가 추가 될 수 있습니다. 따라서 BLOB 및 CLOB 데이터 유형에 대해 DB를 인식하지 않는 Hibernate 구성이 필요합니다.Oracle과 Postgres를 모두 지원하는 BLOB 및 CLOB에 대한 최대 절전 모드
은 오라클과 잘 작동 동안 :
@Lob
@Column(name="column1")
private String str;
@Lob
@Column(name="column2")
private byte[] bytea;
포스트 그레스는 같은과 불평하기 시작했다.
org.springframework.orm.hibernate4.HibernateJdbcException : 하이버 네이트 데이터 액세스에 JDBC 예외 : SQL 용되는 SQLException [(??,) TABLE_NAME 삽입 (TABLE_TYPE, 내 table_id, TABLE_CONTENT_BIN, TABLE_CONTENT_CHAR) 값] ; SQL 상태 [0A000]; 오류 코드 [0]; 삽입 할 수 없습니다 : [com.project.EntityClass]; 중첩 예외는 org.hibernate.exception.GenericJDBCException : 삽입 할 수 없습니다 : [com.project.EntityClass] 발생 원인 : org.hibernate.exception.GenericJDBCException : [com.project.EntityClass] 을 (를) 삽입 할 수 없습니다. hibernate.exception.internal.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:54) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:126) at org.hibernate.persister.entity.AbstractEntityPersister. 삽입 (AbstractEntityPersister.java:3144) org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:3581)에서 org.hibernate.action.internal.EntityInsertAction.execute (EntityInsertAction.java:104)에서 에서 ActionQueue. java : 465) at org.hibernate.engine.spi.ActionQueue.executeActions (ActionQueue.java:351) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:350) at org.hibernate. org.springframework.orm.hibernate4.SpringSessionSynchronization.beforeCommit (SpringSessionSynchronization.java에서 org.hibernate.internal.SessionImpl.flush (SessionImpl.java:1258) 에서 event.internal.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:56) : 104) ... 40 more 발생 원인 : java.sql.SQLFeatureNotSupportedException : 메소드 org.postgresql.jdbc4.Jdbc4PreparedStatement.setCharacterStream (int, Reader, long)이 아직 구현되지 않았습니다. org.postgresql.jdbc4.AbstractJdbc4Statement.setCharacterStream에서 org.postgresql.Driver.notImplemented (Driver.java:670) (AbstractJdbc4Statement.java:116)에서 $ 1 항에 org.hibernate.type.descriptor.sql.ClobTypeDescriptor $. doBind org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBasicType.java:286)에서 (ClobTypeDescriptor.java:124) org.hibernate.type.descriptor.sql.BasicBinder.bind (BasicBinder.java:90)에서 에서 org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBasicType.java:281) org.hibernate.persister.entity.AbstractEntityPersister.dehydrate에서 org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet (AbstractSingleColumnStandardBasicType.java:56) 에서 (AbstractEntityPersister. 자바 : 2 org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:3121) 에서 857) ... 48 개
연구하고 사람들이 @Type(type = "org.hibernate.type.StringClobType")
및 @Type(type = "org.hibernate.type.BinaryType")
와 주석을 제안하는 것을 발견했다. 둘 다 Hibernate Annotation이다. 그러나 우리는 JPA 어노테이션을 사용하려고하며, 런타임시에는 절전 모드가 필요할 것이므로 불필요하다고 생각합니다.
그래서 내 질문은 우리가 다른 DB에 대한 코드를 분기하고 Hibernate 특정 주석을 추가하지 않아도되는 매우 일반적인 방식으로 BLOB 및 CLOB를 처리하는 방법이 있는지 궁금하다. 또한 테이블 생성을 위해 최대 절전 모드를 사용하지 않습니다.
포스트 그레스 9.4-1201-jdbc41 버전 -
Oracle 버전 - 12.1.0.1
최대 절전 모드 버전 -4.3.10.Final
다른 JPA 제공 업체와 함께하면됩니다. 아마도 무언가가 "불평"하다고 말할 때, 어쩌면 무엇을 언급해야할까요? 메시지 + 스택 추적 –
@NeilStockton : 메시지 및 스택 추적이 추가되었습니다. 도와주세요 –