gpt4 book ai didi

java - 使用 Spring Data Jpa 获取连接对象

转载 作者:行者123 更新时间:2023-12-05 03:56:14 25 4
gpt4 key购买 nike

我正在编写一个基于 Spring-Boot 的 java 项目。我有 一对多 关系实体(我排除了 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());

关于java - 使用 Spring Data Jpa 获取连接对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com