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
Odpowiedz
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.
Taa, thanx, długość działa! – Nemanja
Tak, jest to najprostsze rozwiązanie, ale wolałbym używać HSQLDB z trybem zgodności PostgreSQL. –
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ś.
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
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. –
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. –
HSQLDB 2.1 i nowsze wersje mają tryb zgodności PostgreSQL i obsługują typ danych TEXT w tym trybie.
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.
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.
- 1. Problem niezgodności kontraktu WCF
- 2. Hibernate/MySQL problem współbieżności
- 3. Jak rozwiązać problem niezgodności System.Web.Helpers w sieci Web Azure?
- 4. Hibernate, jeden UserType o różnej liczbie kolumn
- 5. Hibernate: klucz obcy ma niepoprawną liczbę kolumn
- 6. Błąd niezgodności Oracle.DataAccess
- 7. Wiosna 3,1 + Hibernate 4.1 Propagation.Supports problem
- 8. Hibernate problem dialekt z konfiguracją Wiosna
- 9. Problem utrzymujący długie ciągi z Hibernate
- 10. Opcja błędu niezgodności typu getOrElse
- 11. Błąd niezgodności klucza obcego SQLite
- 12. układ tabeli: poprawiono problem z szerokościami kolumn
- 13. Błąd niezgodności typu między java.lang.String a ciągiem
- 14. Jak uzyskać nazwy kolumn z wyniku zapytania Hibernate w Javie?
- 15. Hibernate - NonUniqueDiscoveredSqlAliasException gdy tabela ma dwie takie same nazwy kolumn
- 16. Hibernate hbm2ddl.auto = aktualizacja nie aktualizuje definicji kolumn w MySQL
- 17. Problem z UTF-8 w Tworzenie schematu, Hibernate
- 18. const_cast w szablonie. Czy istnieje modyfikator niezgodności?
- 19. Użyj wyjątku dla niezgodności typów w C#
- 20. JavaScript "dla (var i = 0; ...) {...}" niezgodności przeglądarki?
- 21. Unikalne ograniczenie dla wielu kolumn
- 22. Hibernate TypeResolver
- 23. Hibernate - ServiceRegistryBuilder
- 24. ScheduledThreadPoolExecutor wykonanie niewłaściwego czasu z powodu niezgodności czasu procesora
- 25. css typ MIME powrót jako text/plain zamiast text/css
- 26. Hibernate scalić
- 27. Dostawca JPA 2.0 Hibernate
- 28. Sublime Text 2 Service
- 29. Hibernate: Kryteria ze zbiorami
- 30. Kopia zapasowa gem pg_dump wersja niezgodności między EC2 i RDS
Czy próbowałeś również użyć PostgreSQL do testowania? Jeśli tak, jakie problemy spotkałeś? –
Tak, używam PostgreSQL również do testowania. Nie ma z tym problemu, tylko problem niezgodności hsqldb. – Nemanja