Skip to content

Commit d24d2a4

Browse files
author
Nikita Konev
committed
one to many
1 parent 8a003fa commit d24d2a4

File tree

6 files changed

+60
-4
lines changed

6 files changed

+60
-4
lines changed

readme.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
Adapted example from [here](https://javabydeveloper.com/spring-data-jdbc-many-to-many-example/)
1+
Intro https://spring.io/blog/2018/09/17/introducing-spring-data-jdbc
2+
Adapted example from [here](https://javabydeveloper.com/spring-data-jdbc-many-to-many-example/)
3+
Many-To-many https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates

src/main/kotlin/com/example/web/jdbc/web/jdbc/Application.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ fun main(args: Array<String>) {
2020
class AppRunner(
2121
private val subjectRepository: SubjectRepository,
2222
private val branchRepository: BranchRepository,
23-
private val personRepository: PersonRepository
23+
private val personRepository: PersonRepository,
24+
private val orderRepository: OrderRepository,
2425
) : ApplicationRunner {
2526

2627
private val logger = LoggerFactory.getLogger(this::class.java)
@@ -65,8 +66,13 @@ class AppRunner(
6566
val allSubjects = subjectRepository.findAll()
6667
allSubjects.forEach { logger.info("Found subject {}", it) }
6768

69+
6870
// https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#jdbc.query-methods
6971
val foundPersons = personRepository.findByLastName("Doe", PageRequest.of(1, 10))
7072
foundPersons.forEach { logger.info("Found Person {}", it) }
73+
74+
// https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates
75+
val orders = orderRepository.findAll();
76+
orders.forEach { logger.info("Found order {}", it) }
7177
}
7278
}

src/main/kotlin/com/example/web/jdbc/web/jdbc/Entities.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,21 @@ data class Branch(
2828

2929
data class BranchData(val buildingType: String?, var rating: Int, var comment: String?)
3030

31-
data class Person (val id: Long, var firstName: String, var lastName: String)
31+
data class Person (val id: Long, var firstName: String, var lastName: String)
32+
33+
data class OrderItem (
34+
var quantity: Int = 0,
35+
var product: String
36+
)
37+
38+
data class PurchaseOrder (
39+
@Id
40+
val id: Long,
41+
var shippingAddress: String,
42+
@MappedCollection(idColumn = "purchase_order_id")
43+
val items: MutableSet<OrderItem> = HashSet()
44+
) {
45+
fun addItem(quantity: Int, product: String) {
46+
items.add(OrderItem(quantity, product))
47+
}
48+
}

src/main/kotlin/com/example/web/jdbc/web/jdbc/Repositories.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.example.web.jdbc.web.jdbc
22

33
import org.springframework.data.domain.Page
44
import org.springframework.data.domain.Pageable
5+
import org.springframework.data.jdbc.repository.query.Query
56
import org.springframework.data.repository.CrudRepository
67
import org.springframework.stereotype.Repository
78

@@ -15,4 +16,9 @@ interface BranchRepository : CrudRepository<Branch, Int>
1516
@Repository
1617
interface PersonRepository : CrudRepository<Person, Long> {
1718
fun findByLastName(lastname: String, pageable: Pageable) : Page<Person>
19+
}
20+
21+
interface OrderRepository : CrudRepository<PurchaseOrder, Long> {
22+
@Query("select count(*) from order_item")
23+
fun countItems(): Int
1824
}

src/main/resources/db/changelog.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ databaseChangeLog:
2222
author: nkonev
2323
changes:
2424
- sqlFile:
25-
path: /db/changelog/1648633720__person_doe.sql
25+
path: /db/changelog/1648633720__person_doe.sql
26+
- changeSet:
27+
id: 5
28+
author: nkonev
29+
changes:
30+
- sqlFile:
31+
path: /db/changelog/1648636121__order.sql
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
CREATE TABLE purchase_order(
2+
id BIGSERIAL PRIMARY KEY,
3+
shipping_address TEXT NOT NULL
4+
);
5+
CREATE TABLE order_item(
6+
order_item_id BIGSERIAL PRIMARY KEY,
7+
purchase_order_id BIGINT REFERENCES purchase_order(id),
8+
quantity INT NOT NULL,
9+
product TEXT NOT NULL
10+
);
11+
12+
INSERT INTO purchase_order (shipping_address) values
13+
('Tbilisi'), -- 1
14+
('Moscow'); -- 2
15+
16+
INSERT INTO order_item(purchase_order_id, quantity, product) VALUES
17+
(1, 100, 'Tea'), -- 1
18+
(1, 200, 'Coffee'), -- 2
19+
(1, 2, 'Bread'); -- 3

0 commit comments

Comments
 (0)