Ho un problema con Hibernate e PostgreSQL per la produzione e HSQLDB per il test.
Sto utilizzando un approccio top-down che consente a Hibernate di creare lo schema del database.
Sto anche usando le annotazioni; mappatura parte hibernate.cfg.xml contiene solo le linee come
<mapping class="package.subpackage.ClassName" />
Hibernate variabili default stringa a carattere variabile (255) su PostgreSQL che non è sufficiente per me in alcuni casi, quindi devo ridefinire alcune colonne manualmente utilizzando
@Column(columnDefinition = "TEXT")
.
Tuttavia, il tipo di TESTO non è valido per HSQLDB, pertanto non è possibile creare tali tabelle.
Qualcuno può aiutare a risolvere questo?Hibernate postgresql/hsqldb Problema di incompatibilità della colonna TEXT
risposta
Il modo più semplice per affrontare questo problema specifico è probabilmente non utilizzare il ColumnDefinition a tutti e invece per specificare esplicitamente la lunghezza della colonna con (per esempio)
@Column(length=10000)
Potrebbe anche essere che si potrebbe invece mapparlo con @Lob (type = LobType.CLOB)
ma non sono sicuro che sia supportato correttamente in HSQLDB. In Postgres dovrebbe darti il tuo tipo di TESTO.
Sì, grazie, la lunghezza fa il trucco! – Nemanja
Sì, questa è la soluzione più semplice, ma preferirei l'uso di HSQLDB con la modalità di compatibilità postgres. –
Sì, si dispone di un problema davvero grande.
NON UTILIZZARE UN MOTORE DI DATABASE PER LE PROVE E UN ALTRO PER LA PRODUZIONE.
È possibile riscontrare problemi che non si sono mai sognati.
Sì, grazie, avevo questo in mente e ho organizzato test in modo che possano essere eseguiti facilmente su entrambi i database. Ma recentemente ho avuto questo piccolo cambiamento e hsqldb ha iniziato a creare problemi. – Nemanja
Sì e No. Accetto che l'ambiente di test ** dovrebbe essere ** esattamente come l'ambiente di produzione. Ma i test unitari sono qualcosa di diverso: l'uso di un database in memoria (come Apache Derby o HSQLDB) è perfetto. E per di più: ha molti vantaggi. –
Questo commento è probabilmente l'argomento migliore per l'utilizzo di più di un motore di database per il test e la produzione, considerando il tipo di progetto in cui è necessario distribuire l'artefatto in molti ambienti. –
HSQLDB 2.1 e versioni successive ha una modalità di compatibilità PostgreSQL e supporta il tipo di dati TEXT in questa modalità.
Accetto con @fredt. Il tipo di dati TEXT non è un tipo SQL standard, ma un'estensione supportata da alcuni motori.
Per abilitare la modalità di compatibilità PostgreSQL utilizzare i parametri di connessione sql.syntax_pgs=true
.
Per far funzionare H2 in modalità compatibilità con PostgreSQL (utile per il test di junit).
# JDBC Driver
jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:mem:play;MODE=PostgreSQL;TRACE_LEVEL_SYSTEM_OUT=2;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;INIT=CREATE TABLE IF NOT EXISTS PG_CLASS (RELNAME text, RELKIND text);
jdbc.username=sa
jdbc.password=
# general hibernate options
hibernate.database=h2
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
La tabella di creazione PG_CLASS è necessaria per consentire a Hibernate/JPA di funzionare correttamente. Ma a parte questo - piuttosto senza soluzione di continuità.
- 1. incompatibilità della struttura di registrazione
- 2. incompatibilità della versione di NewtonSoft JSON.NET (inferno della DLL)
- 3. Problema di posizione della legenda del grafico della colonna Google
- 4. ottenere i nomi di colonna della tabella in Hibernate
- 5. NamedQueries problema con Hibernate
- 6. . Problemi di incompatibilità del framework.
- 7. Spring data + hibernate utilizza il nome della colonna errato
- 8. Ottenere la lunghezza della colonna dai mapping Hibernate?
- 9. Indicizzazione di una colonna MySql TEXT?
- 10. Problema delle stringhe lunghe persistenti con Hibernate
- 11. Hibernate Nome colonna Parameter Binding
- 12. Hibernate problema dialetto con configurazione di Spring
- 13. Utilizzo di Flot con Bootstrap: incompatibilità IE8?
- 14. MCR e .NET incompatibilità
- 15. incompatibilità versione modulo_layout
- 16. incompatibilità MySQL PHP
- 17. Come si seleziona una colonna usando Hibernate?
- 18. SQL Server; indice sulla colonna TEXT
- 19. Hibernate 4: persistente colonna discriminatore InheritanceType.JOINED valori
- 20. Qualsiasi soluzione al problema della colonna calcolata oggi è SharePoint?
- 21. Semplificazione della query di Hibernate
- 22. Incompatibilità/Incoerenze Javascript
- 23. Hibernate e colonna MS SQL Server Identità
- 24. Query di date con Hibernate nella colonna Timestamp in PostgreSQL
- 25. Selenio WebDriver + Firefox 7.0.1 incompatibilità
- 26. Spazio occupato dalla colonna di tipo TEXT in MySQL
- 27. hibernate criteria api problema tabella join
- 28. Perl problema di incompatibilità con ciascuno in un hash di hash - 5.14 → 5.8.8
- 29. Primavera 3.1 + Hibernate 4.1 Propagation.Supports problema
- 30. Tomcat/Hibernate Problema "SEVERE: Error listenerStart"
Hai provato a utilizzare Postgres anche per il test? Se sì, che tipo di problemi hai incontrato? –
Sì, uso Postgres anche per i test. Nessun problema, solo problema di incompatibilità hsqldb – Nemanja