java - 使用 Spring Data Jpa 获取连接对象
问题描述
我正在编写一个基于 Spring-Boot 的 java 项目。我有one-to-many
关系实体(我排除了 getter 和 setter):
@Entity
@Table(name = "restaurants")
public class Restaurant {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotBlank(message = "Please fill the name")
private String name;
@NotBlank(message = "Please fill the address")
private String address;
private LocalDateTime registered;
private boolean isEnabled = true;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "restaurant")
private List<Meal> meals;
public Restaurant() {
}
public Restaurant(String name, String address, List<Meal> meals) {
this.name = name;
this.address = address;
this.meals = meals;
}
}
@Entity
@Table(name = "meals")
public class Meal {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String description;
private Integer price;
private LocalDate date;
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "restaurant_id", nullable = false)
private Restaurant restaurant;
public Meal() {
}
public Meal(String description, Integer price, Restaurant restaurant) {
this.description = description;
this.price = price;
this.restaurant = restaurant;
}
}
以下是创建表的 SQL 脚本:
CREATE TABLE restaurants
(
id INTEGER DEFAULT nextval('hibernate_sequence') PRIMARY KEY,
address VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
registered TIMESTAMP DEFAULT now() NOT NULL,
is_enabled BOOLEAN DEFAULT TRUE NOT NULL
);
CREATE UNIQUE INDEX restaurants_unique_name_address_idx ON restaurants (name, address);
CREATE TABLE meals
(
id INTEGER DEFAULT nextval('hibernate_sequence') PRIMARY KEY,
date DATE DEFAULT now() NOT NULL,
description VARCHAR(255) NOT NULL,
price INTEGER NOT NULL,
restaurant_id INTEGER NOT NULL,
FOREIGN KEY (restaurant_id) REFERENCES restaurants (id) ON DELETE CASCADE
);
CREATE UNIQUE INDEX meals_unique_restId_date_description_idx ON meals (restaurant_id, date, description);
我需要从存储库中获取所有餐馆:
public interface RestaurantRepository extends CrudRepository<Restaurant, Integer>
,但联餐必须只有今天的日期。
如何使用 Spring Data Jpa 完成?也许可以使用类似方法findBy()
或@Query
注释 - 但我不知道它是如何工作的。
解决方案
您的查询应如下所示,
public interface RestaurantRepository extends CrudRepository<Restaurant, Integer> {
@Query("select distinct r from Restaurant r inner join r.meals m where m.date =:date")
List<Restaurant> findByRestaurantMealDate(@Param("date") LocalDate date);
}
现在拿来,
List<Restaurant> restaurants = repository.findByRestaurantMealDate(LocalDate.now());
推荐阅读
- python - Django 表 2 - 如何更改我正在显示的模型的查询集?
- postgresql - Docker Postgres 数据库损坏
- node.js - 使用 mongoDB nestjs 进行模糊搜索
- php - preg_replace():不推荐使用/e修饰符,使用preg_replace_callback需要解决这个问题
- ubuntu - Ubuntu 20.04 Wine:WSALookupServiceBegin 失败:122
- opengl - 计算着色器中的纹理环绕模式
- java - 没有构造函数参数的 ViewModelFactory 和 ViewModel
- php - 小于日期 y/m/d
- django - 使用 nginx 将 django 部署到 aws ec2 的问题
- python - 我如何在 discord.py 中停止函数循环(