2016-08-01 29 views
3

Unser Projekt muss sowohl Oracle als auch Postgres Dbs unterstützen. Und möglicherweise werden dieser Liste weitere Datenbanken hinzugefügt. Also benötigen Sie eine DB-agnostische Hibernate-Konfiguration für BLOB- und CLOB-Datentypen.Hibernate-Konfiguration für BLOB und CLOB zur Unterstützung von Oracle und Postgres

Während Oracle arbeitet mit fein:

@Lob 
@Column(name="column1") 
private String str; 

@Lob 
@Column(name="column2") 
private byte[] bytea; 

Postgres begann mit dem gleichen beschweren.

org.springframework.orm.hibernate4.HibernateJdbcException: JDBC Ausnahme auf den Ruhezustand den Datenzugriff: SQLException für SQL [(?,?,?,) Einfügen in TABLE_NAME (TABLE_TYPE, TABLE_ID, TABLE_CONTENT_BIN, TABLE_CONTENT_CHAR) -Werte] ; SQL-Status [0A000]; Fehlercode [0]; konnte nicht einfügen: [com.project.EntityClass]; verschachtelte Ausnahme ist org.hibernate.exception.GenericJDBCException: konnte Folgendes nicht einfügen: [com.project.EntityClass]] verursacht durch: org.hibernate.exception.GenericJDBCException: konnte Folgendes nicht einfügen: [com.project.EntityClass] at org. hibernate.exception.internal.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:54) bei org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:126) bei org.hibernate.persister.entity.AbstractEntityPersister. insert (AbstractEntityPersister.java:3144) bei org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:3581) bei org.hibernate.action.internal.EntityInsertAction.execute (EntityInsertAction.java:104) bei org.hibernate.engine.spi.ActionQueue.executeActions (ActionQueue. Java: 465) bei org.hibernate.engine.spi.ActionQueue.executeActions (ActionQueue.java:351) bei org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:350) bei org.hibernate. event.internal.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:56) bei org.hibernate.internal.SessionImpl.flush (SessionImpl.java:1258) bei org.springframework.orm.hibernate4.SpringSessionSynchronization.beforeCommit (SpringSessionSynchronization.java: 104) ... 40 mehr verursacht durch: java.sql.SQLFeatureNotSupportedException: Methode org.postgresql.jdbc4.Jdbc4PreparedStatement.setCharacterStream (int, Reader, long) ist noch nicht implementiert. bei org.postgresql.Driver.notImplemented (Driver.java:670) bei org.postgresql.jdbc4.AbstractJdbc4Statement.setCharacterStream (AbstractJdbc4Statement.java:116) bei 1 org.hibernate.type.descriptor.sql.ClobTypeDescriptor 4 $ $. doBind (ClobTypeDescriptor.java:124) bei org.hibernate.type.descriptor.sql.BasicBinder.bind (BasicBinder.java:90) bei org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBasicType.java:286) bei org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBasicType.java:281) bei org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet (AbstractSingleColumnStandardBasicType.java:56) bei org.hibernate.persister.entity.AbstractEntityPersister.dehydrate (AbstractEntityPersister. Java: 2 857) bei org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:3121) ... 48 weitere

Recherchiert und fanden heraus, dass Menschen mit @Type(type = "org.hibernate.type.StringClobType") und @Type(type = "org.hibernate.type.BinaryType") mit Anmerkungen versehen sind darauf hindeutet. Beides sind Hibernate Annotations. Wir beabsichtigen jedoch, JPA-Annotationen zu verwenden, und dies würde zur Laufzeit Hibernate benötigen, was mir unnötig erscheint.

Also meine Frage ist, ob es eine Möglichkeit gibt, BLOBs und CLOBs in einer sehr generischen Art und Weise zu behandeln, die uns keine Verzweigungen für verschiedene DBs erfordern würde und ohne Hibernate spezifische Annotationen hinzuzufügen. Außerdem verwenden wir den Ruhezustand nicht für die Tabellenerstellung.

Postgres version- 9,4-1201-jdbc41

Oracle Version - 12.1.0.1

Hibernate Version -4.3.10.Final

+0

Mit anderen JPA-Anbietern tun Sie, wie Sie dort haben. Vielleicht, wenn Sie sagen, dass etwas "sich beschweren", vielleicht besser zu erwähnen, was Nachricht + Stack-Trace –

+0

@NeilStockton: Nachricht und Stack-Trace hinzugefügt. Bitte helfen Sie –

Antwort

0

Da ich von hier keine anderen Antworten bekam, dachte ich, ich werde posten, was ich getan habe, um mein Problem zu lösen, was anderen helfen kann.

Da wir keine Tabellen mit Hibernate erstellten, las ich irgendwo, dass Hibernate/Jpa in der Lage wäre, die Felder in geeignete Typen ohne die @Lob Annotation zu konvertieren. Ex.- für Postgres in Text und für Oracle in BLOB für ein Feld vom Typ byte[].

Ausprobiert, und arbeitete für Postgres und Oracle. :)