Chyba relation „hibernate_sequence“ does not exist

Tuto chybu jsem dostal při použití Spring Data se Spring Boot a databází PostgreSQL. Takto vypadala třída definující entity.

@Entity
@Table(name = "t_login")
@SequenceGenerator(name = "t_login_id_seq_gen", sequenceName = "t_login_id_seq", allocationSize = 1)
data class Login(
        @Id
        @GeneratedValue
        var id: Long = 0,

        @Column
        var token: UUID = UUID.randomUUID()
)

Pro id bylo třeba více specifikovat @GeneratedValue:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "t_login_id_seq_gen")

Tím se problém vyřešil.

Změna verze Javy z 8 na 11

Nedávno jsem prováděl změny verze Javy na projektu, který používá Spring Boot. Měnil jsem verzi Javy z verze 8 na verzi 11. Nebylo to až tak strašné, jak jsem čekal (spíše naopak), přesto se ale některé komplikace objevily. V tomto příspěvku budu postupovat od chyby k chybě, tak jak se u mě objevovaly.

Číst dálZměna verze Javy z 8 na 11

Spring JPA neukládá vazbu na rodiče

Pokud používáte Spring JPA a nedochází k ukládání vazeb na rodiče (potomek je uložen, ale foreign key na rodiče je null), chyba může být v tom, jak máte vytvořeny vazby. Pokud totiž používáte bidirectional (oboustrannou) vazbu (rodič ví o potomkovi a potomek ví o rodiči), může vám chybě právě jedna strana vazby.

Ukážu to na příkladu rodičovské entity Quiz a potomků QuizQuestion.

Číst dálSpring JPA neukládá vazbu na rodiče

Spring Boot JPA: vytváření dotazů

Vytváření dotazů ve Spring Boot JPA je jednoduché. Nejdříve je třeba si vytvořit objekty, které představují tabulky a jejich sloupce. V tomto příkladu si vytvoříme objekt User.

@Entity(name="t_user")
public class User implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
	private String email;
	private String password;

        // getry a setry
}

Pomocí anotace @Entity říkám, že tato třída má představovat tabulku v databázi, name="t_user" definuje, že tabulka v databázi se bude jmenovat t_user. Anotací @Id označuji private long id jako primární klíč tabulky a @GeneratedValue určuje jak se má id generovat.

Číst dálSpring Boot JPA: vytváření dotazů

Spring Boot a Spring Data – vygenerování DDL skriptu

Pokud ve svém projektu používá Spring Boot a Spring Data, stačí pro vytváření tabulek do application.properties umístit:

spring.jpa.hibernate.ddl-auto=create

Při každém startu aplikace se znovu vytvoří tabulky a další potřebné objekty. To se hodí, když aplikaci vyvíjíte a často děláte změny.

Pokud potřebujete samostatný DDL skript (například pro prvotní vytvoření tabulek na serveru, kam budete nasazovat), stačí do application.properties přidat:

spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql

Tímto se v adresáři projektu vygeneruje soubor create.sql s potřebnými SQL příkazy.

Zdroj: stackoverflow.com/…-spring-boot-data-jpa-and-h