Reputation: 509
I am having Spring Data setup with JPA. Below is the entity structure.
Entity A:
@Entity
@Table(name = "a")
public class A {
...
@Id
@Column(name = "a_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToMany (cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.REFRESH, CascadeType.REMOVE}, fetch = FetchType.LAZY)
@JoinTable (name = "a_b_mapping",
joinColumns = @JoinColumn(name = "a_id", referencedColumnName = "a_id"),
inverseJoinColumns = @JoinColumn(name = "b_id", referencedColumnName = "id"))
private List<B> bList;
}
Entity B
@Entity
@Table(name = "b")
public class B {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
...
}
Entity A_B (mapping table):
@Entity
@Table(name = "a_b_mapping")
public class ABMapping {
@EmbeddedId
private ABId pk = new ABId();
@ManyToOne
@MapsId("id")
@JoinColumn(name = "b_id", referencedColumnName = "id")
private B b;
@ManyToOne
@MapsId("id")
@JoinColumn(name = "a_id", referencedColumnName = "a_id")
private A a;
@Column(name = "c_id"/*, updatable=false, insertable=false*/)
private Integer cId;
}
Insert/Update/Delete are working perfectly fine with this entity setup and repository mechanism.
The result required is like,
SELECT a FROM a JOIN a_b_mapping ON a.a_id = a_b_mapping.a_id WHERE a.a_id = 123 AND a_b_mapping.c_id IN (1, 2, 3)
How can we achieve this result using criteria query?
Upvotes: 0
Views: 20