'Retrieve only the superclass from a class hierarchy
I have an scenario as the following:
@Entity
@Table(name = "ANIMAL")
@Inheritance(strategy = InheritanceType.JOINED)
public class Animal implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "S_ANIMAL")
@SequenceGenerator(name = "S_ANIMAL", sequenceName = "S_ANIMAL", allocationSize = 1)
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
.
.
.
}
and as the subclass:
@Entity
@Table(name = "DOG")
public class Dog extends Animal {
private static final long serialVersionUID = -7341592543130659641L;
.
.
.
}
I have a JPA Select statement like this:
SELECT a FROM Animal a;
I'm using Hibernate 3.3.1
As I can see the framework retrieves instances of Animal and also of Dog using a left outer join.
Is there a way to Select only the "part" Animal? I mean, the previous Select will get all the Animals, those that are only Animals but not Dogs and those that are Dogs.
I want them all, but in the case of Dogs I want to only retrieve the "Animal part" of them.
I found the @org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
but as I could see this only works if Animal isn't an @Entity.
Thanks a lot.
Solution 1:[1]
Actually, there is a way to get just the superclass: you just need to use the native query from JPA. In my case, I am using JPA Repositories. Therefore, it would be something like that:
@Query(value = "SELECT * FROM animal", nativeQuery = true)
List<Resource> findAllAnimal();
The flag nativeQuery as true allow running the native SQL on database.
If you are using Entity Manager then check this out: https://www.thoughts-on-java.org/jpa-native-queries/
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | julianfperez |
