diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt index 4732ae0a0..8ac2a4c07 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt @@ -5,32 +5,45 @@ import java.nio.file.Path import java.nio.file.Paths import java.time.LocalDateTime import javax.persistence.CascadeType +import javax.persistence.Column import javax.persistence.Entity import javax.persistence.FetchType import javax.persistence.GeneratedValue import javax.persistence.Id +import javax.persistence.JoinColumn import javax.persistence.ManyToOne import javax.persistence.OneToOne +import javax.persistence.PrimaryKeyJoinColumn +import javax.persistence.Table import javax.validation.constraints.NotBlank import javax.validation.constraints.NotNull @Entity +@Table(name = "book") class Book( @NotBlank + @Column(name = "name", nullable = false) val name: String, + @Column(name = "url", nullable = false) val url: URL, + + @Column(name = "updated", nullable = false) val updated: LocalDateTime ) { @Id @GeneratedValue + @Column(name = "id", nullable = false, unique = true) + @PrimaryKeyJoinColumn var id: Long = 0 @NotNull @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "serie_id", nullable = false) lateinit var serie: Serie - @OneToOne(optional = false, orphanRemoval = true, cascade = [CascadeType.ALL], fetch = FetchType.LAZY, mappedBy = "book") + @OneToOne(optional = false, orphanRemoval = true, cascade = [CascadeType.ALL], fetch = FetchType.LAZY) + @JoinColumn(name = "book_metadata_id", nullable = false) var metadata: BookMetadata = BookMetadata().also { it.book = this } set(value) { value.book = this diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/BookMetadata.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/BookMetadata.kt index d69579a6d..f11793480 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/BookMetadata.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/BookMetadata.kt @@ -9,24 +9,32 @@ import javax.persistence.Enumerated import javax.persistence.FetchType import javax.persistence.GeneratedValue import javax.persistence.Id +import javax.persistence.JoinColumn import javax.persistence.OneToOne +import javax.persistence.Table @Entity +@Table(name = "book_metadata") class BookMetadata( @Enumerated(EnumType.STRING) + @Column(name = "status", nullable = false) val status: Status = Status.UNKNOWN, + + @Column(name = "media_type") val mediaType: String? = null, + pages: List = emptyList() ) { @Id @GeneratedValue + @Column(name = "id", nullable = false, unique = true) val id: Long = 0 - @OneToOne(optional = false, fetch = FetchType.LAZY) + @OneToOne(optional = false, fetch = FetchType.LAZY, mappedBy = "metadata") lateinit var book: Book @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name = "book_metadata_pages") + @CollectionTable(name = "book_metadata_pages", joinColumns = [JoinColumn(name = "book_metadata_id")]) @Column(name = "pages") private val _pages: MutableList = mutableListOf() diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/BookPage.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/BookPage.kt index 66fd1f272..90a6d6cd1 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/BookPage.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/BookPage.kt @@ -1,9 +1,13 @@ package org.gotson.komga.domain.model +import javax.persistence.Column import javax.persistence.Embeddable @Embeddable class BookPage( + @Column(name = "file_name", nullable = false) val fileName: String, + + @Column(name = "media_type", nullable = false) val mediaType: String ) \ No newline at end of file diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt index 40c98939b..d29e2be4e 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt @@ -3,23 +3,31 @@ package org.gotson.komga.domain.model import java.net.URL import java.time.LocalDateTime import javax.persistence.CascadeType +import javax.persistence.Column import javax.persistence.Entity import javax.persistence.FetchType import javax.persistence.GeneratedValue import javax.persistence.Id import javax.persistence.OneToMany +import javax.persistence.Table import javax.validation.constraints.NotBlank @Entity +@Table(name = "serie") class Serie( @NotBlank + @Column(name = "name", nullable = false) val name: String, + @Column(name = "url", nullable = false) val url: URL, + + @Column(name = "updated", nullable = false) val updated: LocalDateTime ) { @Id @GeneratedValue + @Column(name = "id", nullable = false, unique = true) var id: Long = 0 @OneToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY, mappedBy = "serie", orphanRemoval = true) diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/persistence/PersistenceTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/persistence/PersistenceTest.kt index 033304990..b461cc682 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/persistence/PersistenceTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/persistence/PersistenceTest.kt @@ -33,7 +33,7 @@ class PersistenceTest( @Test fun `given serie with book when saving then metadata is also saved`() { // given - val serie = makeSerie(name = "serie", books = mutableListOf(makeBook("book1"))) + val serie = makeSerie(name = "serie", books = listOf(makeBook("book1"))) // when serieRepository.save(serie) @@ -47,7 +47,7 @@ class PersistenceTest( @Test fun `given existing book when updating metadata then new metadata is saved`() { // given - val serie = makeSerie(name = "serie", books = mutableListOf(makeBook("book1"))) + val serie = makeSerie(name = "serie", books = listOf(makeBook("book1"))) serieRepository.save(serie) // when diff --git a/komga/src/test/resources/application-test.yml b/komga/src/test/resources/application-test.yml index 8c0a9c61b..371c170ec 100644 --- a/komga/src/test/resources/application-test.yml +++ b/komga/src/test/resources/application-test.yml @@ -2,7 +2,9 @@ application.version: TESTING spring: jpa: - show-sql: true properties: hibernate: format_sql: true +logging.level.org.hibernate: + SQL: DEBUG + type.descriptor.sql.BasicBinder: TRACE \ No newline at end of file