JPA Entity Mapping with Relationships
Map entities with JPA annotations: OneToMany, ManyToOne, ManyToMany with fetch strategies and cascading.
import jakarta.persistence.*;
import java.time.LocalDateTime;
import java.util.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String name;
@Column(unique = true, nullable = false)
private String email;
// One user has many orders
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Order> orders = new ArrayList<>();
// Many users belong to many roles
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
private Set<Role> roles = new HashSet<>();
@Column(updatable = false)
private LocalDateTime createdAt;
@PrePersist
void onCreate() { createdAt = LocalDateTime.now(); }
// Helper methods to manage bidirectional relationship
public void addOrder(Order order) {
orders.add(order);
order.setUser(this);
}
public void removeOrder(Order order) {
orders.remove(order);
order.setUser(null);
}
// getters, setters omitted for brevity
}
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@Column(nullable = false)
private Double amount;
@Enumerated(EnumType.STRING)
private OrderStatus status = OrderStatus.PENDING;
}
enum OrderStatus { PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED }
@Entity
public class Role {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String name;
}Sponsored
Supabase
Use Cases
- Database schema design with JPA entities
- Managing bidirectional relationships in Spring Data
- Entity lifecycle with cascade and orphan removal
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
Spring Data JPA — Custom Queries
Write custom JPA queries with @Query, derived methods, Specifications, and native SQL for complex lookups.
Best for: Complex database queries in Spring applications
Spring Data — Pagination and Sorting
Implement pagination with Spring Data JPA: Pageable, Sort, Slice, and custom page responses.
Best for: Paginated API responses for large datasets
Prisma Find with Relations
Query related records using Prisma ORM include and select for efficient nested data loading.
Best for: Loading user profiles with posts
Spring Data JPA with Kotlin
Build data layers with Spring Data JPA in Kotlin: entities, repositories, queries, and pagination.
Best for: CRUD operations with Spring Data