How to refer mapped superclass fields in JPA query syntax?

471 Views Asked by At

I have a class with multiple mapped superclasses

@EqualsAndHashCode(callSuper = true)
@Entity(name = "Supported_cars_usage")
@Data
@NoArgsConstructor
public class SupportedCarUsage extends SupportedUsageBase {

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "supported_car_id")
    private SupportedCar supportedCar;
}

@MappedSuperclass
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class SupportedUsageBase extends BaseEntity {

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id")
    User user;

    boolean allowed;

}

I am trying to select for, search by and group by some nested field. For the beginning I found I can refer nested field at all.

I tried variations like

Query query = em.createQuery("select supportedCar, allowed from Supported_cars_usage");

Query query = em.createQuery("select supportedCar, super.allowed from Supported_cars_usage");

Query query = em.createQuery("select supportedCar, SupportedUsageBase.allowed from Supported_cars_usage");

but failed with various errors. Is these some syntax to refer fields inside mapped superclass?

Database itself is created normally.

Getters are present and created automatically with Lombok (see @Data annotation).

I wish not to use native queries.

1

There are 1 best solutions below

0
SternK On

You can write something like this:

List<Object[]> result = em.createQuery("select s.supportedCar, s.allowed from Supported_cars_usage s").getResultList();