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