Hibernate nie escape'uje nazwy tabeli gdy robi alter table, przez co nie dodaje kolumny

0

Problem: hibernate nie może zrobić alter table, bo nie dodaje quot do nazwy tabeli. Nowe tabele tworzy bez problemu
Baza danych: postgres
Encja:
screenshot-20180510212256.png
Propertisy hibernate:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.ddl-auto=update

#cause of bug in spring boot 2.0, lob is not implemented yet ?
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

Logi:
screenshot-20180510212507.png
Jak widać do encji nie dodaje quot, powinno to wyglądać tak:

    alter table if exists public."COMPANY"
       add column "NIP" varchar(255)

Przeszukałem googiel ale nigdzie nie widzę aby ktoś miał podobny problem;/
Drodzy koledzy, macie jakieś pomysły?

0

Nie musisz dodawać escape'owanych cudzysłowiów:

alter table if exists public."COMPANY"
       add column "NIP" varchar(255)

pójdzie jak będziesz mieć po prostu @Column("NIP")

0

tak ale problem w tym, że chcę mieć nazwy tabeli pisane "caps lockiem"

0

a postgres ma po prostu taką składnię, jak nie będzie escape to nazwy będą zapisywane małymi literami

0

Walczyłem z tym niedawno. Escapujesz nie " tylko ` (znaczek pod tyldą, a nie apostrof!).

@Column(name = "`NIP`")
private String aTutajNazywaszJakChcesz;
0

@Noozen
Przeciez to ma sie nijak do składni postgresa. Jak chcesz wykonać np:

create table 'COMPANY' (
       'ID' int4 not null,
        'NAME' varchar(255),
        'PASSWORD' varchar(255),
        'Sake' varchar(255),
        primary key ('ID')
    )

w postgresie uzywasz " a nie '

0

ok tyldę wstawiłem, w poprzednim poście jest mój błąd(zwracam część honoru :D), ale to niczego nie zmienia. Problem jest taki sam jak w tytułowym poście

0

ddl update w hibernate się nie używa, chyba że do zabawkowych projektów. Trzeba skorzystać z Flyway itp. Skrypty inicjujące i upgradujące model bazy danych pisze się ręcznie.

Dlaczego? Bo podobno prędzej czy później i tak dochodzi się do momentu, w którym hibernate nie daje rady zrobić alter. Ten mechanizm nie jest doskonały.

edit: Piszesz cudzysłowy, żeby zmusić hibernate do jakiegoś konkretnego zachowania pod postgresem. Ale pod innymi bazami to będzie najprawdopodobniej nieprawidłowe. Więc to podejście jest niezbyt udane.

0
Błękitny Kret napisał(a):

ok tyldę wstawiłem, w poprzednim poście jest mój błąd(zwracam część honoru :D), ale to niczego nie zmienia. Problem jest taki sam jak w tytułowym poście

Na pewno zrobiłeś tak zarówno dla nazwy tabeli i dla nazw pól? Jeżeli rzeczywiście nie działa to nie wiem, może nie zrozumiałem problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1