ObjectDB ObjectDB

Retrieve data of all entity classes in a single query

#1

I have in an objectdb file 10 Entity Classes with some data in each (Athlete, Trainer, Stadium etc)

This is the code I use to retrieve all Managed Types and data for the Athlete class

Metamodel metamodel = em.getMetamodel();
Set<ManagedType<?>> allManagedTypes = metamodel.getManagedTypes();
     
for(ManagedType o : allManagedTypes)
{
   String strTmpClass = o.toString().replace("Type ", ""); // Getting the object name for the SELECT

   String tmpQuery = "SELECT s FROM " + strTmpClass + " s"; // This works for all classes
   TypedQuery<Athlete> query = em.createQuery(tmpQuery, Athlete.class); // I want to avoid this
   List<Athlete> results = query.getResultList();
   for(Athlete result : results)
   {
         System.out.println(result.Code + ", " + result.Name + ", " + result.Surname + ", " + result.CountryOfOrigin + ", " +  result.Genre);
   }
}

Is there a way to get data of all classes without writing down 10 different queries (i.e. using the for loop)?

I tried to use TypedQuery<Object> instead of TypedQuery<Athlete> but had casting issues
 

edit
delete
#2

You can retrieve all the entity objects using a query on Object:

    SELECT o FROM Object o

Of course, since the result list will include objects of different types, before using casting you will have to check object types using instanceof. Alternatively, you may avoid casting and retrieve fields in a generic way using Java reflection.

ObjectDB Support
edit
delete
#3

Thanks for your answers

So in case I don't have the java classes declarations and I only have an .odb file, how can I parse the data?

edit
delete
#4

Using Java Reflection API. The JPA Metamodel API may also help.

ObjectDB Support
edit
delete

Reply

To post on this website please sign in.