Entity primary keys are now forcibly sequence generated

This commit is contained in:
neviyn 2021-05-09 16:00:34 +01:00
parent 87303d1ad7
commit ca567b2e60
3 changed files with 42 additions and 24 deletions

View File

@ -11,6 +11,7 @@ import javax.persistence.JoinColumn
import javax.persistence.JoinTable import javax.persistence.JoinTable
import javax.persistence.ManyToMany import javax.persistence.ManyToMany
import javax.persistence.ManyToOne import javax.persistence.ManyToOne
import javax.persistence.SequenceGenerator
import javax.validation.constraints.Pattern import javax.validation.constraints.Pattern
@Entity @Entity
@ -30,14 +31,20 @@ open class Member(
inverseJoinColumns = [JoinColumn(name = "role_id", referencedColumnName = "id")] inverseJoinColumns = [JoinColumn(name = "role_id", referencedColumnName = "id")]
) )
open var roles: MutableSet<Role> = mutableSetOf(), open var roles: MutableSet<Role> = mutableSetOf(),
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) open var id: Long = -1 @Id
@SequenceGenerator(name="member_id_seq", sequenceName = "member_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_id_seq")
open var id: Long = -1
) )
@Entity @Entity
open class Role( open class Role(
@Column(unique = true) @Column(unique = true)
open var name: String = "", open var name: String = "",
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) open var id: Long = -1 @Id
@SequenceGenerator(name="role_id_seq", sequenceName = "role_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "role_id_seq")
open var id: Long = -1
) )
@Entity @Entity
@ -54,7 +61,10 @@ open class Image(
inverseJoinColumns = [JoinColumn(name = "tag_id", referencedColumnName = "id")] inverseJoinColumns = [JoinColumn(name = "tag_id", referencedColumnName = "id")]
) )
open var tags: MutableSet<Tag> = mutableSetOf(), open var tags: MutableSet<Tag> = mutableSetOf(),
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) open var id: Long = -1 @Id
@SequenceGenerator(name="image_id_seq", sequenceName = "image_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "image_id_seq")
open var id: Long = -1
) )
@Entity @Entity
@ -62,5 +72,8 @@ open class Tag(
@Column(unique = true) @Column(unique = true)
@Pattern(regexp = "[a-zA-Z0-9_]*") // Only allow alphanumeric and underscores @Pattern(regexp = "[a-zA-Z0-9_]*") // Only allow alphanumeric and underscores
open var tag: String = "", open var tag: String = "",
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) open var id: Long = -1 @Id
@SequenceGenerator(name="tag_id_seq", sequenceName = "tag_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tag_id_seq")
open var id: Long = -1
) )

View File

@ -1,19 +1,19 @@
DROP SCHEMA IF EXISTS booru CASCADE ; DROP SCHEMA IF EXISTS booru CASCADE;
CREATE SCHEMA booru; CREATE SCHEMA booru;
CREATE TABLE booru.member CREATE TABLE booru.member
( (
id bigint NOT NULL PRIMARY KEY, id bigserial NOT NULL PRIMARY KEY,
name varchar NOT NULL UNIQUE, name varchar NOT NULL UNIQUE,
email varchar NOT NULL, email varchar NOT NULL,
password varchar NOT NULL, password varchar NOT NULL,
enabled boolean enabled boolean NOT NULL
); );
CREATE TABLE booru.image CREATE TABLE booru.image
( (
id bigint NOT NULL PRIMARY KEY, id bigserial NOT NULL PRIMARY KEY,
filename varchar NOT NULL UNIQUE, filename varchar NOT NULL UNIQUE,
uploader bigint NOT NULL, uploader bigint NOT NULL,
CONSTRAINT uploader FOREIGN KEY (uploader) REFERENCES booru.member (id) CONSTRAINT uploader FOREIGN KEY (uploader) REFERENCES booru.member (id)
@ -21,13 +21,13 @@ CREATE TABLE booru.image
CREATE TABLE booru.role CREATE TABLE booru.role
( (
id bigint NOT NULL PRIMARY KEY, id bigserial NOT NULL PRIMARY KEY,
name varchar NOT NULL name varchar NOT NULL
); );
CREATE TABLE booru.tag CREATE TABLE booru.tag
( (
id bigint NOT NULL PRIMARY KEY, id bigserial NOT NULL PRIMARY KEY,
tag varchar NOT NULL UNIQUE tag varchar NOT NULL UNIQUE
); );
@ -48,12 +48,17 @@ CREATE TABLE booru.member_roles
CONSTRAINT member FOREIGN KEY (member_id) REFERENCES booru.member (id) CONSTRAINT member FOREIGN KEY (member_id) REFERENCES booru.member (id)
); );
CREATE SEQUENCE IF NOT EXISTS booru.member_id_seq START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE IF NOT EXISTS booru.image_id_seq START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE IF NOT EXISTS booru.role_id_seq START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE IF NOT EXISTS booru.tag_id_seq START WITH 1 INCREMENT BY 1;
-- Populate default values -- Populate default values
INSERT INTO booru.role (id, name) INSERT INTO booru.role (name)
VALUES (1, 'ADMIN'), VALUES ('ADMIN'),
(2, 'USER'); ('USER');
INSERT INTO booru.member (id, name, email, password, enabled) INSERT INTO booru.member (name, email, password, enabled)
VALUES (1, 'root', 'root@example.org', '$2a$10$XiMxQ1Qe.AprOdJKUPum6O2URy2b4ogffujVZVpUT8CJPksfSyNZK', TRUE); VALUES ('root', 'root@example.org', '$2a$10$XiMxQ1Qe.AprOdJKUPum6O2URy2b4ogffujVZVpUT8CJPksfSyNZK', TRUE);
INSERT INTO booru.member_roles (member_id, role_id) INSERT INTO booru.member_roles (member_id, role_id)
VALUES (1, 1), VALUES (1, 1),
(1, 2); (1, 2);

View File

@ -1,3 +1,3 @@
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.url=jdbc:h2:mem:testdb;MODE=PostgreSQL
spring.datasource.driverClassName=org.h2.Driver spring.datasource.driverClassName=org.h2.Driver
images.directory=./images images.directory=./images