From fefdea089d864af7dc9d789f27e4bd557134f5fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20M=C3=B6rling?= Date: Fri, 15 May 2026 12:14:28 +0200 Subject: [PATCH] refactor: add @ManyToOne User relation to Order entity and @EntityGraph query MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add @ManyToOne(fetch = LAZY) + @JoinColumn(name = "user_id", insertable = false, updatable = false) to Order entity so ORM can navigate order.getUser().getEmail() for admin responses - Keep userId as writable UUID field; the relationship is read-only to preserve backward compatibility with existing setUserId() calls - Add getUser() / setUser() accessors - Replace handwritten @Query JOIN FETCH with Spring Data derived method findAllByOrderByCreatedAtDesc() annotated with @EntityGraph(attributePaths = {"user"}) — same eager-load behavior, zero custom JPQL - No database schema change: user_id FK already exists --- .../main/java/se/bilhalsning/entity/Order.java | 15 +++++++++++++++ .../bilhalsning/repository/OrderRepository.java | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/backend/src/main/java/se/bilhalsning/entity/Order.java b/backend/src/main/java/se/bilhalsning/entity/Order.java index 62664dd..b3fb5cc 100644 --- a/backend/src/main/java/se/bilhalsning/entity/Order.java +++ b/backend/src/main/java/se/bilhalsning/entity/Order.java @@ -2,7 +2,10 @@ package se.bilhalsning.entity; import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import jakarta.persistence.PrePersist; import jakarta.persistence.PreUpdate; import jakarta.persistence.Table; @@ -21,6 +24,10 @@ public class Order { @Column(name = "user_id", nullable = false, columnDefinition = "uuid") private UUID userId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", insertable = false, updatable = false) + private User user; + @Column(name = "plate", nullable = false, length = 10) private String plate; @@ -75,6 +82,14 @@ public class Order { this.userId = userId; } + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + public String getPlate() { return plate; } diff --git a/backend/src/main/java/se/bilhalsning/repository/OrderRepository.java b/backend/src/main/java/se/bilhalsning/repository/OrderRepository.java index 287d32a..5faacb8 100644 --- a/backend/src/main/java/se/bilhalsning/repository/OrderRepository.java +++ b/backend/src/main/java/se/bilhalsning/repository/OrderRepository.java @@ -1,5 +1,6 @@ package se.bilhalsning.repository; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import se.bilhalsning.entity.Order; @@ -11,5 +12,9 @@ import java.util.UUID; @Repository public interface OrderRepository extends JpaRepository { List findByUserIdOrderByCreatedAtDesc(UUID userId); + List findByStatus(OrderStatus status); + + @EntityGraph(attributePaths = {"user"}) + List findAllByOrderByCreatedAtDesc(); }