私は2つのテーブル "table1"と "table2"を持っています。 table1の各行には、table2に複数の行があります。データを取得するには、私はその後、私はこれは私のようにテーブル1から行のリストが表示されます。このJPAの条件付きwhere節
@Transactional
public interface Table1Repository extends JpaRepository<Table1, Integer> {
Page<Table1> findByCompanyId(Integer companyId,Pageable pageable);
}
のようにリポジトリを作成している以下のクラス
@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
}
と
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "table2", schema = "dbo")
public class Table2 extends BaseDomain{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private Integer cityId;
private Integer companyId;
@OneToOne
@JoinColumn(name = "vendorId")
@JsonIgnore
private Table1 table1;
// getter and setter for above
}
を作成しましたcompanyIdと対応するvendorIdを持つ行のリストごとにTable2にあります。
これまでの実装は正常に動作しています。
応答は、現在、私は、入力として企業IDを取ってい
{
"content": [
{
"vendorId": 23,
"name": "vendorname",
"details": details,
"table2": [
{
"id" :1,
"cityId":1,
},
"id" :2,
"cityId" : 3
]
},
{....}
]
}
で、上記応答を与えます。今私はcityIdを入力としても使いたいと思っています。したがって、table2出力には、指定されたcityIdの詳細のみが含まれている必要があります。
どのように私はそれを達成することができますか?私はtable1とtable2の別のモデルを作成したくありません。
、第二のエンティティに、私はあなたの代わりに '@ OneToOne' –
使用CriteriaBuilder CBのManyToOne' @'を使用してCBを使用して接続されているすべての三つのフィールドでCriteriaQueryのquery.whereを作成すべきだと思います。等しい。 – btreport
申し訳ありません私はJPAが初めてです。もっと説明できますか?いくつかのサンプルコードが役に立ちます。 –