refactor: add @ManyToOne User relation to Order entity and @EntityGraph query
- 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
This commit is contained in:
parent
96508d63cd
commit
fefdea089d
2 changed files with 20 additions and 0 deletions
|
|
@ -2,7 +2,10 @@ package se.bilhalsning.entity;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
import jakarta.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
import jakarta.persistence.PrePersist;
|
import jakarta.persistence.PrePersist;
|
||||||
import jakarta.persistence.PreUpdate;
|
import jakarta.persistence.PreUpdate;
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
@ -21,6 +24,10 @@ public class Order {
|
||||||
@Column(name = "user_id", nullable = false, columnDefinition = "uuid")
|
@Column(name = "user_id", nullable = false, columnDefinition = "uuid")
|
||||||
private UUID userId;
|
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)
|
@Column(name = "plate", nullable = false, length = 10)
|
||||||
private String plate;
|
private String plate;
|
||||||
|
|
||||||
|
|
@ -75,6 +82,14 @@ public class Order {
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public User getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(User user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
public String getPlate() {
|
public String getPlate() {
|
||||||
return plate;
|
return plate;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package se.bilhalsning.repository;
|
package se.bilhalsning.repository;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.EntityGraph;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
import se.bilhalsning.entity.Order;
|
import se.bilhalsning.entity.Order;
|
||||||
|
|
@ -11,5 +12,9 @@ import java.util.UUID;
|
||||||
@Repository
|
@Repository
|
||||||
public interface OrderRepository extends JpaRepository<Order, UUID> {
|
public interface OrderRepository extends JpaRepository<Order, UUID> {
|
||||||
List<Order> findByUserIdOrderByCreatedAtDesc(UUID userId);
|
List<Order> findByUserIdOrderByCreatedAtDesc(UUID userId);
|
||||||
|
|
||||||
List<Order> findByStatus(OrderStatus status);
|
List<Order> findByStatus(OrderStatus status);
|
||||||
|
|
||||||
|
@EntityGraph(attributePaths = {"user"})
|
||||||
|
List<Order> findAllByOrderByCreatedAtDesc();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue