Search code examples
javahibernatespring-mvchqlhibernate-mapping

hibernate select query from child table


I am pretty new to hibernate. I have a two tables having one to many relationship. Two tables are:

public class Pashmina implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_pashmina_id")
    @SequenceGenerator(name = "sq_pashmina_id", sequenceName = "sq_pashmina_id")
    @Column(name = "PASHMINA_ID")
    private int pashminaId;

    @Column(name = "PASHMINA_NAME")
    private String pashminaName;

    @Column(name = "PRICE")
    private double price;

    @Column(name = "ADDED_AT", insertable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date addedAt;

    @Column(name = "CATEGORY")
    private String category;

    @Column(name = "ENABLED", insertable = false)
    private Character enabled;

    @OneToMany(mappedBy = "colourId", fetch = FetchType.EAGER)
    private Set<PashminaColour> pashminaColor  = new HashSet<PashminaColour>();

    @OneToMany(mappedBy = "imageId", fetch = FetchType.EAGER)
    private Set<Image> images  = new HashSet<Image>();

    @OneToMany(mappedBy = "descriptionId", fetch = FetchType.EAGER)
    private Set<Description> descriptions  = new HashSet<Description>();

    //getter and setter method

This is a parent class and it have one to many relationship with Image table

public class Image implements Serializable {
    @Id
    @Column(name = "IMAGE_ID")
    private int imageId;

    @Column(name = "IMAGE_NAME")
    private String imageName;

    @JoinColumn(name = "PASHMINA_ID", referencedColumnName = "PASHMINA_ID")
    @ManyToOne
    private Pashmina pashmina;

Now I want to select a imagenames from Image class using its parent class's id (ie: pashminaId)

eg:

SELECT IMAGE_NAME FROM TBL_IMAGE WHERE PASHMINA_ID = 'some_digit';

How can i pass pashminaId in image class as there is no pashminaId it only have an Object creation of Parent class Pashmina.

So, How can i achieve this in hibernate?

Let me know if you don't understand me.

Thanks! Hoping for positive response.


Solution

  • As Hibernate treats objects instead of SQL tables, you can simply access the pashmina object from your image object, and in your query you will be treating java objects/POJOs, so you can acccess it via Image.pashmina.pashminaId.

    So you can write the following query:

    String hql = "select I.imageName FROM Image I WHERE I.pashmina.pashminaId = 10";
    Query query = session.createQuery(hql);
    List results = query.list();