Java JPA中的条件where子句
我有两张桌子“表1”和“表2”。对于表1中的每一行,表2中可以有多行。为了获取数据,我创建了以下类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
@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)