2010-11-18 13 views
9

Mam problem z używaniem Hibernate i PostgreSQL do produkcji i HSQLDB do testowania.
Używam podejścia od góry do dołu pozwalającego Hibernate utworzyć schemat bazy danych.
Używam także adnotacji; część odwzorowanie hibernate.cfg.xml zawiera tylko linie takie jak
<mapping class="package.subpackage.ClassName" />
Hibernate zmiennych domyślnie ciąg do charakteru różne (255) na PostgreSQL, która nie jest wystarczająca dla mnie w niektórych przypadkach, więc muszę na nowo zdefiniować kilka kolumn ręcznie za pomocą
@Column(columnDefinition = "TEXT").
Ale typ TEKSTU jest nieprawidłowy dla HSQLDB, więc nie można utworzyć tych tabel.

Czy ktoś może pomóc rozwiązać ten problem?Hibernate postgresql/hsqldb Problem niezgodności kolumn TEXT

+0

Czy próbowałeś również użyć PostgreSQL do testowania? Jeśli tak, jakie problemy spotkałeś? –

+0

Tak, używam PostgreSQL również do testowania. Nie ma z tym problemu, tylko problem niezgodności hsqldb. – Nemanja

Odpowiedz

10

Najprostszym sposobem radzenia sobie z tego konkretnego problemu jest prawdopodobnie nie używać columnDefinition w ogóle i zamiast jawnie określić długość kolumny z (na przykład)

@Column(length=10000) 

Może to być również, że można zamiast zamapuj go za pomocą @Lob (typ = LobType.CLOB)

, ale nie jestem pewien, czy jest poprawnie obsługiwany w HSQLDB. W Postgres powinien dać ci swój typ TEKSTU.

+0

Taa, thanx, długość działa! – Nemanja

+1

Tak, jest to najprostsze rozwiązanie, ale wolałbym używać HSQLDB z trybem zgodności PostgreSQL. –

-5

Tak, masz naprawdę duży problem z .

NIE UŻYWAJ JEDNEGO BAZY DANYCH DO BADANIA I INNEGO DO PRODUKCJI.

Możesz trafić na problemy, o których nigdy nie marzyłeś.

+0

Yeah, thanx, Miałem to na uwadze i zorganizowałem testy, aby można było je łatwo uruchomić w obu bazach danych. Ale ostatnio miałem tę niewielką zmianę i hsqldb zaczął stwarzać problemy. – Nemanja

+19

Tak i Nie. Zgadzam się, że środowisko testowe ** powinno być ** dokładnie takie, jak środowisko produkcyjne. Ale testy jednostkowe są czymś innym: korzystanie z bazy danych w pamięci (jak Apache Derby lub HSQLDB) jest całkowicie w porządku. Co więcej: ma wiele zalet. –

+0

Ten komentarz jest prawdopodobnie najlepszym argumentem za używaniem więcej niż jednego silnika bazy danych do testowania i produkcji, biorąc pod uwagę rodzaj projektu, w którym trzeba wdrożyć artefakt w wielu środowiskach. –

6

HSQLDB 2.1 i nowsze wersje mają tryb zgodności PostgreSQL i obsługują typ danych TEXT w tym trybie.

8

Zgadzam się z @fredt. Typ danych TEXT nie jest standardowym typem SQL, ale rozszerzeniem obsługiwanym przez niektóre wyszukiwarki.

Aby włączyć tryb zgodności PostgreSQL użyj sql.syntax_pgs=true w parametrach połączenia.

2

Aby H2 działał w trybie zgodności z PostgreSQL (użyteczne dla testów junitowych).

# 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 

Utworzenie tabeli PG_CLASS jest wymagane, aby umożliwić Hibernate/JPA prawidłowe działanie. Ale poza tym - całkiem bezproblemowo.

Powiązane problemy