如何编写JPA join?

时间:2018-08-08 07:33:19

标签: spring spring-boot jpa spring-data-jpa spring-data

我有两个表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中对此进行查询?

2 个答案:

答案 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存储库中编写自定义查询的方式,以下链接可能对您有所帮助。

https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-three-custom-queries-with-query-methods/

https://docs.oracle.com/javaee/6/tutorial/doc/bnbrg.html

答案 1 :(得分:0)

您已经在产品中获得价格对象作为列表。我同意,如果您希望只需要一个价格的特殊情况,可以编写查询。另一种方法是编写‘getCurrentPrice(Date d)方法。 (第二个不带参数的版本将使用“今天”作为日期)。您将日期与每个价格的日期范围进行比较,然后从列表中返回正确的价格。无论清单中有多少价格,这可能就是您想要在代码中调用的价格。