Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.hibernate.test.nestedidclass;
- import java.io.Serializable;
- import java.time.LocalDate;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Objects;
- import javax.persistence.CascadeType;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.IdClass;
- import javax.persistence.Inheritance;
- import javax.persistence.InheritanceType;
- import javax.persistence.JoinColumn;
- import javax.persistence.JoinColumns;
- import javax.persistence.ManyToOne;
- import javax.persistence.OneToMany;
- import javax.persistence.OneToOne;
- import javax.persistence.PrePersist;
- import javax.persistence.Query;
- import javax.persistence.SequenceGenerator;
- import junit.framework.Assert;
- import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
- import static org.hibernate.testing.transaction.TransactionUtil.doInJPA;
- import org.junit.Test;
- public class NestedCompositeKeyTest extends BaseEntityManagerFunctionalTestCase {
- @Override
- protected Class<?>[] getAnnotatedClasses() {
- return new Class<?>[]{
- Samplings.class,
- Samples.class,
- TestSamples.class
- };
- }
- @Override
- protected void addConfigOptions(Map options) {
- }
- @Test
- // @RequiresDialect({PostgreSQL94Dialect.class})
- public void testGetTestSampleFromSample() {
- doInJPA(this::entityManagerFactory, entityManager -> {
- Samplings samplings = new Samplings();
- samplings.setSequenceId(1);
- samplings.setYear(2018);
- Samples sample = new Samples();
- sample.setSampling(samplings);
- sample.setSampleLetter("A");
- samplings.addSample(sample);
- TestSamples testSamples = new TestSamples();
- testSamples.setSample(sample);
- sample.setTestSamples(testSamples);
- entityManager.persist(samplings);
- });
- doInJPA(this::entityManagerFactory, entityManager -> {
- String queryString = "select s from Samples s Join fetch s.sampling sp Join Fetch s.testSamples";
- Query query = entityManager.createQuery(queryString);
- List<Samples> samplesResult = query.getResultList();
- Samples firstSampleBack = samplesResult.get(0);
- Assert.assertNotNull(firstSampleBack.getTestSamples());
- });
- }
- public static class SamplingsPK implements Serializable {
- private int year;
- private Integer sequenceId;
- public SamplingsPK(int year, Integer sequenceId) {
- this.sequenceId = sequenceId;
- this.year = year;
- }
- private SamplingsPK() {
- }
- @PrePersist
- public void prePersist() {
- year = LocalDate.now().getYear();
- }
- public int getYear() {
- return year;
- }
- public void setYear(int year) {
- this.year = year;
- }
- public Integer getSequenceId() {
- return sequenceId;
- }
- public void setSequenceId(Integer sequenceId) {
- this.sequenceId = sequenceId;
- }
- @Override
- public int hashCode() {
- int hash = 5;
- hash = 79 * hash + this.year;
- hash = 79 * hash + Objects.hashCode(this.sequenceId);
- return hash;
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final SamplingsPK other = (SamplingsPK) obj;
- if (this.year != other.year) {
- return false;
- }
- if (!Objects.equals(this.sequenceId, other.sequenceId)) {
- return false;
- }
- return true;
- }
- }
- @Entity
- @IdClass(SamplingsPK.class)
- @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
- public static class Samplings {
- @Id
- private int year;
- @Id
- @GeneratedValue
- private Integer sequenceId;
- @OneToMany(mappedBy = "sampling", cascade = CascadeType.ALL, orphanRemoval = true)
- private List<Samples> samples = new ArrayList<>();
- public int getYear() {
- return year;
- }
- public void setYear(int year) {
- this.year = year;
- }
- public Integer getSequenceId() {
- return sequenceId;
- }
- public void setSequenceId(Integer sequenceId) {
- this.sequenceId = sequenceId;
- }
- public List<Samples> getSamples() {
- return samples;
- }
- public void setSamples(List<Samples> samples) {
- this.samples = samples;
- }
- public void addSample(Samples samples) {
- getSamples().add(samples);
- }
- }
- public static class SamplesPK implements Serializable {
- private String sampleLetter;
- private SamplingsPK sampling;
- public SamplesPK(SamplingsPK sampling, String sampleLetter) {
- this.sampling = sampling;
- this.sampleLetter = sampleLetter;
- }
- private SamplesPK() {
- }
- }
- @Entity
- @IdClass(SamplesPK.class)
- public static class Samples {
- @Id
- private String sampleLetter;
- @Id
- @ManyToOne(optional = false)
- @JoinColumns({
- @JoinColumn(name = "sampling_id", referencedColumnName = "sequenceId"),
- @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
- private Samplings sampling;
- @OneToOne(mappedBy = "sample", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
- private TestSamples testSamples;
- public String getSampleLetter() {
- return sampleLetter;
- }
- public void setSampleLetter(String sampleLetter) {
- this.sampleLetter = sampleLetter;
- }
- public Samplings getSampling() {
- return sampling;
- }
- public void setSampling(Samplings sampling) {
- this.sampling = sampling;
- }
- public TestSamples getTestSamples() {
- return testSamples;
- }
- public void setTestSamples(TestSamples testSamples) {
- this.testSamples = testSamples;
- }
- }
- @Entity
- public static class TestSamples {
- @Id
- @SequenceGenerator(name = "test_samples_id_seq", sequenceName = "test_samples_id_seq", allocationSize = 1)
- @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "test_samples_id_seq")
- private Integer id;
- @OneToOne(fetch = FetchType.LAZY)
- private Samples sample;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public Samples getSample() {
- return sample;
- }
- public void setSample(Samples sample) {
- this.sample = sample;
- }
- @Override
- public String toString() {
- return "TestSamples [id=" + id + "]";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement