Parth Bhagat
Parth Bhagat

Reputation: 509

JPA Criteria Query on independent column of JoinTable

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

Answers (0)

Related Questions