Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA中的条件where子句_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java JPA中的条件where子句

Java JPA中的条件where子句,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我有两张桌子“表1”和“表2”。对于表1中的每一行,表2中可以有多行。为了获取数据,我创建了以下类 @Entity @EntityListeners(AuditingEntityListener.class) @Table(name = "table1", schema = "dbo") public class Table1 extends BaseDomain{ @Id @GeneratedValue(strategy = GenerationType.AUTO) privat

我有两张桌子“表1”和“表2”。对于表1中的每一行,表2中可以有多行。为了获取数据,我创建了以下类

@Entity
@EntityListeners(AuditingEntityListener.class) 
@Table(name = "table1", schema = "dbo")
public class Table1 extends BaseDomain{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Integer vendorId;
  private String name;
  private Integer companyId;
  private String details;

  @OneToMany(mappedBy = "table1",cascade = CascadeType.ALL)
  @NotFound(action = NotFoundAction.IGNORE)
  private Set<Table2> table2;

 // getter and setter for above
}
然后我创建了这样的存储库

@Transactional
public interface Table1Repository  extends JpaRepository<Table1, Integer> {

  Page<Table1> findByCompanyId(Integer companyId,Pageable pageable);

}
目前,我将companyId作为输入,并给出上述响应。现在我想把cityId作为一个输入。因此,表2的输出应该只包含给定cityId的详细信息


那么,有谁能帮助我实现这一目标呢?我不想为表1和表2创建另一个模型。

在回答之前,在第二个实体上,我认为您应该使用
@ManyToOne
而不是
@OneToOne
使用CriteriaBuilder cb并创建CriteriaQuery查询。其中,所有三个字段都附加到using cb.equal。对不起!我是JPA的新手。你能再解释一下吗?一些示例代码会有所帮助。我还需要按CompanyIdHanks筛选数据。让我试试看您的数据模型没有companyId字段?没有,但表中有一个名为CompanyIdY的列您应该在数据模型中包含它,否则Spring data无法使用nethod名称为您创建查询
Page<Table1> findByCompanyIdAndTable2_CityId(Integer companyId, Integer cityId, Pageable pageable);  
{
  "content": [
    {
      "vendorId": 23,
      "name": "vendorname",
      "details": details,
      "table2": [
                 {
                  "id" :1,
                 "cityId":1,
                 },
                  "id" :2,
                  "cityId" : 3
                ]
    },
   {....}
]
}
Page<Table1> findByCompanyIdAndTable2_CityId(Integer companyId, Integer cityId, Pageable pageable);  
@OneToMany(mappedBy = "table1",cascade = CascadeType.ALL, fetch=FetchType.EAGER)