Search code examples
javaspring-bootjpajpql

i am looking for a proper JPQL query for the below tables so that it can work in java code it should not to be a native query


below is the table schema for which i am not able to make proper JPQL query

  Mobile table     | hardware table       |  releases table
  --------------------------------------------------------------
  id pk            |   id  pk            | id  pk
  name varchar         size  varchar       launchdate varchar
  hardware_id fk   |   pdname varchar    | tally  varchar
  releases_id fk   |                     | 

 i have tried all below query's in my code but it all gives error for:
  //String qry="Select m.name,h.size,h.pdname from com.example.users.Mobile m, 
   com.example.users.entities.Hardware h where m.hardware_id=h.id ";


    //String qry="Select m from Mobile m inner join fetch m.hardware h where m.hardware_id=h.id";

    //String qry = "SELECT m FROM Mobile m JOIN m.hardware_id h WHERE m.hardware_id = h.id";

    String qry="select m.name from mobile m,hardware h where m.hardware_id=h.id";


   System.out.println("in entity manager Query is "+ qry);

    Query query = entityManager.createQuery(qry);

    return query.getResultList();

Error: org.hibernate.hql.internal.ast.QuerySyntaxException: mobile is not mapped

 This is what i have in Mobile Entity

  @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name ="hardware_id",referencedColumnName = "id")
 private Hardware hardware;

 @OneToOne(cascade = CascadeType.ALL)
 @JoinColumn(name="releases_id",referencedColumnName = "id")
 private Releases releases;

Solution

  • The name you are specifying in @JoinColumn is database column not your entity attribute name. Issue is you are mixing your attribute and column names.

    Query:

    "SELECT m FROM Mobile m JOIN Hardware h ON m.hardware.id = h.id"