Skip to content
Advertisement

Java ORM vs multiple entities

I have a class Health Check – as part of the class I record how many parasites are seen (enum NONE, SOME, MANY) and also the location of the parasites (enum HEAD, FEET, BODY).

Two ways this could be done:

METHOD 1

Health Check

@Entity
public class HealthCheck {
    @Id
    @GeneratedValue(strategy = AUTO)
    private Long id;
    private Parasite parasite;

Parasite

public class Parasite {
    private BodyLocation bodyLocation;
    private Coverage coverage;
}

Or I could have:

METHOD 2

@Entity
public class HealthCheck {
    @Id
    @GeneratedValue(strategy = AUTO)
    private Long id;
    private ParasiteNumber parasiteNumber;
    private ParasiteLocation parasiteLocation;

Would method 1 require @Entity on parasite class and a entry in the table for each Health Check and a @OneToOne annotation?

Note Parasite class is not used anywhere else. Its only a part of a Health Check.

Which way is correct?

Advertisement

Answer

Generally speaking, yes. In ORM (aka JPA or Hibernate), you are building a graph of objects that represent things in your database. Anything that one @Entity touches is also an @Entity because it’s a graph.

Whether it’s a @OneToOne or a @ManyToOne, etc, depends on the nature of your data model. But, keep in mind, those connections can also be @Lazy, so they are not loaded until they are needed.

Because of @Lazy, method 2 might be preferred, idk. I assume ParasiteLocation and ParasiteNumber is some sort of join-table. If that’s the case, you could load a HealthCheck with its PL and PN, but those objects could be Lazy to Parasite.

I don’t think there is a one-size-fits-all answer to your question. It very much depends. But good news, ORM is flexible to cover any/all scenario you might have.

Advertisement