Spring boot 尝试按实体JPA+进行筛选时获取重复值;弹簧数据
我有一个Spring boot 尝试按实体JPA+进行筛选时获取重复值;弹簧数据,spring-boot,jpa,Spring Boot,Jpa,我有一个订单实体和一个产品实体,我将它们定义如下 import java.sql.Timestamp; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Gene
订单
实体和一个产品
实体,我将它们定义如下
import java.sql.Timestamp;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id", updatable = false, nullable = false)
private Long orderId;
@Column(name = "order_details")
@NotEmpty(message = "*Please provide order details")
private String orderDetais;
@Column(name = "order_date")
private Timestamp orderDate;
@Column(name = "amount")
private Double amount;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "order_products", joinColumns = @JoinColumn(name = "order_id"), inverseJoinColumns = @JoinColumn(name = "product_id"))
private List<Product> products;
}
每个餐厅都有一套独特的产品。订单信息不包含餐厅信息,因此我必须间接查询产品,然后确定订单是从哪个餐厅下的。(此处假设用户
指餐厅)
我已经创建了我的订单存储
,如下所示
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.keto.login.model.Orders;
import com.keto.login.model.Product;
@Repository
public interface OrdersRepository extends JpaRepository<Orders, Long> {
List<Orders> findByProductsIn(List<Product> productList);
}
import java.util.List;
导入org.springframework.data.jpa.repository.JpaRepository;
导入org.springframework.stereotype.Repository;
导入com.keto.login.model.Orders;
导入com.keto.login.model.Product;
@存储库
公共接口OrdersRepository扩展了JpaRepository{
List findByProductsIn(List productList);
}
现在,我需要用餐厅id获取特定餐厅的所有订单。因此,在我的服务中,我编写了一段代码,如下所示
Product example = Product.builder().restaurant(User.builder().id(user_id).build()).build();
List<Product> productList = productRepository.findAll(Example.of(example));
List<Orders> ordersList=ordersRepository.findByProductsIn(productList);
Product-example=Product.builder().restaurant(User.builder().id(User_id.build()).build();
List productList=productRepository.findAll(Example.of(Example));
List ordersList=ordersepository.findByProductsIn(productList);
当订单中有多个产品时,orderList发回的订单数量与订单中的产品数量相同。我应该如何确保我的方法返回唯一的订单
我不确定这些信息是否足够,所以请让我知道是否有更多的信息可以帮助
Product example = Product.builder().restaurant(User.builder().id(user_id).build()).build();
List<Product> productList = productRepository.findAll(Example.of(example));
List<Orders> ordersList=ordersRepository.findByProductsIn(productList);