我有两个表Product和Price。产品可以根据时间段具有多种价格。
产品实体:
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
@OneToMany(mappedBy = "product", fetch = FetchType.EAGER)
List<Price> price;
}
价格实体:
@Entity
public class Price {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
LocalDate timePeroid;
Double price;
@ManyToOne()
Product product;
}
我希望有3个动态日期中的时间段的产品实体。但是,如果不存在该时间段,那么我也应该具有产品实体,但标价应包含三个空值。如何在JPA中对此进行查询?
答案 0 :(得分:0)
您可以使用JpaRepository或EntityManagerFactory在JPA中查询数据。
1。 JpaRepository
您可以像下面那样为产品实体创建存储库。
iter = /*some condition*/ ? container.erase(iter) : std::next(iter);
然后在注入存储库依赖项之后。
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}
您可以使用此存储库获取所需的产品电子书。
@Resource
ProductRepository productRepository;
2。 EntityManagerFactory
注入依赖项后的EntityManagerFactory
Product product = productRepository.findById(id);
您可以检索类似的数据。
@Resource
EntityManagerFactory entityManagerFactory;
在上述两种情况下,如果将结果产品保留在数据库中,则结果产品将包含其价格清单,否则清单将为空。
要加入特殊条件,您可以查看在实体管理器工厂和Jpa存储库中编写自定义查询的方式,以下链接可能对您有所帮助。
答案 1 :(得分:0)
您已经在产品中获得价格对象作为列表。我同意,如果您希望只需要一个价格的特殊情况,可以编写查询。另一种方法是编写‘getCurrentPrice(Date d)方法。 (第二个不带参数的版本将使用“今天”作为日期)。您将日期与每个价格的日期范围进行比较,然后从列表中返回正确的价格。无论清单中有多少价格,这可能就是您想要在代码中调用的价格。