summaryrefslogtreecommitdiff
path: root/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer
diff options
context:
space:
mode:
Diffstat (limited to 'spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer')
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java66
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java17
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java45
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java7
4 files changed, 135 insertions, 0 deletions
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java
new file mode 100644
index 0000000..43bf0a6
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java
@@ -0,0 +1,66 @@
+package com.example.spring.bank.customer;
+
+import java.util.List;
+
+import com.example.spring.bank.account.Account;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+
+
+
+@Entity
+public class Customer {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+
+ private String name;
+
+ public Customer() {
+ super();
+ }
+
+ public Customer(String name) {
+ super();
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "customer")
+// @OneToMany
+ private List<Account> accounts;
+
+ public List<Account> getAccounts() {
+ return accounts;
+ }
+
+ public void setAccounts(List<Account> accounts) {
+ this.accounts = accounts;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "Customer [id=" + id + ", name=" + name + "]";
+ }
+
+}
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java
new file mode 100644
index 0000000..1560672
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java
@@ -0,0 +1,17 @@
+package com.example.spring.bank.customer;
+
+import java.util.Optional;
+
+import com.example.spring.bank.account.Account;
+
+public interface CustomerManager {
+
+ public Customer create(Customer customer);
+
+ public Optional<Customer> findById(Long customerId);
+ public Iterable<Customer> findAll();
+
+ public void addAccount(Customer customer, Account account);
+
+ // Other methods
+}
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java
new file mode 100644
index 0000000..05b3fdc
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java
@@ -0,0 +1,45 @@
+package com.example.spring.bank.customer;
+
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.example.spring.bank.account.Account;
+
+import jakarta.transaction.Transactional;
+
+@Service
+public class CustomerManagerImpl implements CustomerManager {
+
+ @Autowired
+ private CustomerRepository customerRepository;
+
+ @Override
+ @Transactional
+ public Customer create(Customer customer) {
+ return customerRepository.save(customer);
+ }
+
+ @Override
+ public Optional<Customer> findById(Long customerId) {
+ return customerRepository.findById(customerId);
+ }
+
+ @Override
+ public Iterable<Customer> findAll() {
+ return customerRepository.findAll();
+ }
+
+ @Transactional
+ @Override
+ public void addAccount(Customer customer, Account account) {
+ // May not work is the customer is detached.
+ // customer.getAccounts().add(account);
+
+ // Access the Customer again - so that it would not be a detached entity.
+ customerRepository.findById(customer.getId()).get().getAccounts().add(account);
+ }
+
+ // Other methods
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java
new file mode 100644
index 0000000..8695d66
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java
@@ -0,0 +1,7 @@
+package com.example.spring.bank.customer;
+
+import org.springframework.data.repository.ListCrudRepository;
+
+public interface CustomerRepository extends ListCrudRepository<Customer, Long> {
+
+} \ No newline at end of file