Reputation: 5749
I use spring data jpa with hibernate.
@Entity
public class Samples {
@EmbeddedId
private SampleId id;
@MapsId("samplingId")
@ManyToOne(optional = false)
private Samplings sampling;
..
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {
@OneToOne
private Products product;
@OneToOne
private Dimensions dimension;
@OneToOne
private Colors color;
...
}
Dimension and colors could be null.
I search to get samples
with product
, dimensions
, colors
(if don't have dimension
, colors
, want to get samples
too).
I did :
Join<Samples, Samplings> samplings = root.join("sampling", JoinType.INNER);
Join<Samples, Colors> colors = (Join) samplings.join("color", JoinType.INNER);
Join<Samples, Dimensions> dimension = (Join) samplings.join("dimension", JoinType.INNER);
Join<Samplings, Products> product = (Join) samplings.join("product", JoinType.INNER);
To get result I need I should put Left for color
and dimension
?
Upvotes: 0
Views: 42
Reputation: 222402
if don't have dimension, colors, want to get samples too
To achieve that, you would need to change the INNER JOIN
s on color
and dimension
to LEFT JOIN
s :
Join<Samples, Samplings> samplings = root.join("sampling", JoinType.INNER);
Join<Samples, Colors> colors = (Join) samplings.join("color", JoinType.LEFT);
Join<Samples, Dimensions> dimension = (Join) samplings.join("dimension", JoinType.LEFT);
Join<Samplings, Products> product = (Join) samplings.join("product", JoinType.INNER);
Depending on your use case, you might want to turn the INNER JOIN
on product
to a LEFT JOIN
as well.
Upvotes: 1