我用弹簧数据的JPA与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;
...
}
尺寸和颜色可能为空。
我搜索得到samples
与product
,dimensions
,colors
(如果没有dimension
,colors
,希望得到samples
太)。
我所做的:
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);
为了得到结果我需要我应该把留给color
和dimension
?
如果没有尺寸,颜色,想要得到的样本太
要做到这一点,你需要改变INNER JOIN
和color
到dimension
s的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);
根据你的使用情况,您可能希望在INNER JOIN
的product
求助于LEFT JOIN
为好。