Search code examples
javaspringhibernategrailsgroovy

How to include the mapped values of a @OneToMany relation on a query


I am interested in performing the two following queries:

A. Getting a persons basic info e.g.

{
    "id": 186506,
    "pidm": 324950,
    "first_name": "Jane"
}

B. Getting a person's basic information as well as their phone numbers e.g

{
    "id": 186506,
    "pidm": 324950,
    "first_name": "Jane",
    "phones": ["1234567890", "0987654321"]
}

How should I go about it? Is it possible? With this mapping, so far I'm able to get either the basic information, or the phones, but not the combination of the two as I would like.

These are the domain I'm using:

@Entity
@Table(name="PERSON")
class Person implements Serializable {

    @Id
    @Column(name="person_id")
    Long id

    @Column(name="person_pidm")
    Long pidm

    @Column(name="person_first_name")
    String first_name

    @OneToMany(mappedBy = "person")
    @JsonBackReference
    private List<Telephone> phones

    List<Telephone> getPhones() {
        return phones
    }
}
@Entity
@Table(name="TELEPHONE")
class Telephone implements Serializable {

    @Id
    @Column(name="telephone_id")
    Long id

    @Column(name="person_pidm")
    String pidm

    @Column(name="telephone_phone_number")
    String phone_number

    @ManyToOne
    @JoinColumn(name="sprtele_pidm", referencedColumnName = "spriden_pidm")
    private SpridenDetail person;
}

Solution

  • Try this i hope this will work for you

    @Repository
    public interface PersonRepository extends JpaRepository<Person,Long>{
    
    //A. Getting a persons basic info e.g.
    
    @Query("SELECT id,pidm,first_name FROM Person")
    public List<Person> findAllPerson();
    
    
     //B. Getting a person's basic information as well as their phone numbers e.g
    
    @Query("SELECT p,t FROM Person p JOIN p.phones t")
    public List<Person> findAll(); 
    }