Advertisement
Guest User

Untitled

a guest
Aug 16th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.59 KB | None | 0 0
  1. package org.hibernate.test.nestedidclass;
  2.  
  3. import java.io.Serializable;
  4. import java.time.LocalDate;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Objects;
  9. import javax.persistence.CascadeType;
  10. import javax.persistence.Entity;
  11. import javax.persistence.FetchType;
  12. import javax.persistence.GeneratedValue;
  13. import javax.persistence.GenerationType;
  14. import javax.persistence.Id;
  15. import javax.persistence.IdClass;
  16. import javax.persistence.Inheritance;
  17. import javax.persistence.InheritanceType;
  18. import javax.persistence.JoinColumn;
  19. import javax.persistence.JoinColumns;
  20. import javax.persistence.ManyToOne;
  21. import javax.persistence.OneToMany;
  22. import javax.persistence.OneToOne;
  23. import javax.persistence.PrePersist;
  24. import javax.persistence.Query;
  25. import javax.persistence.SequenceGenerator;
  26. import junit.framework.Assert;
  27. import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
  28. import static org.hibernate.testing.transaction.TransactionUtil.doInJPA;
  29.  
  30. import org.junit.Test;
  31.  
  32. public class NestedCompositeKeyTest extends BaseEntityManagerFunctionalTestCase {
  33.  
  34. @Override
  35. protected Class<?>[] getAnnotatedClasses() {
  36. return new Class<?>[]{
  37. Samplings.class,
  38. Samples.class,
  39. TestSamples.class
  40. };
  41. }
  42.  
  43. @Override
  44. protected void addConfigOptions(Map options) {
  45.  
  46. }
  47.  
  48. @Test
  49. // @RequiresDialect({PostgreSQL94Dialect.class})
  50. public void testGetTestSampleFromSample() {
  51.  
  52. doInJPA(this::entityManagerFactory, entityManager -> {
  53. Samplings samplings = new Samplings();
  54.  
  55. samplings.setSequenceId(1);
  56. samplings.setYear(2018);
  57.  
  58. Samples sample = new Samples();
  59. sample.setSampling(samplings);
  60. sample.setSampleLetter("A");
  61.  
  62. samplings.addSample(sample);
  63.  
  64. TestSamples testSamples = new TestSamples();
  65. testSamples.setSample(sample);
  66.  
  67. sample.setTestSamples(testSamples);
  68.  
  69. entityManager.persist(samplings);
  70.  
  71. });
  72.  
  73. doInJPA(this::entityManagerFactory, entityManager -> {
  74. String queryString = "select s from Samples s Join fetch s.sampling sp Join Fetch s.testSamples";
  75. Query query = entityManager.createQuery(queryString);
  76.  
  77. List<Samples> samplesResult = query.getResultList();
  78.  
  79. Samples firstSampleBack = samplesResult.get(0);
  80. Assert.assertNotNull(firstSampleBack.getTestSamples());
  81.  
  82. });
  83.  
  84. }
  85.  
  86. public static class SamplingsPK implements Serializable {
  87.  
  88. private int year;
  89.  
  90. private Integer sequenceId;
  91.  
  92. public SamplingsPK(int year, Integer sequenceId) {
  93. this.sequenceId = sequenceId;
  94. this.year = year;
  95. }
  96.  
  97. private SamplingsPK() {
  98.  
  99. }
  100.  
  101. @PrePersist
  102. public void prePersist() {
  103. year = LocalDate.now().getYear();
  104. }
  105.  
  106. public int getYear() {
  107. return year;
  108. }
  109.  
  110. public void setYear(int year) {
  111. this.year = year;
  112. }
  113.  
  114. public Integer getSequenceId() {
  115. return sequenceId;
  116. }
  117.  
  118. public void setSequenceId(Integer sequenceId) {
  119. this.sequenceId = sequenceId;
  120. }
  121.  
  122. @Override
  123. public int hashCode() {
  124. int hash = 5;
  125. hash = 79 * hash + this.year;
  126. hash = 79 * hash + Objects.hashCode(this.sequenceId);
  127. return hash;
  128. }
  129.  
  130. @Override
  131. public boolean equals(Object obj) {
  132. if (this == obj) {
  133. return true;
  134. }
  135. if (obj == null) {
  136. return false;
  137. }
  138. if (getClass() != obj.getClass()) {
  139. return false;
  140. }
  141. final SamplingsPK other = (SamplingsPK) obj;
  142. if (this.year != other.year) {
  143. return false;
  144. }
  145. if (!Objects.equals(this.sequenceId, other.sequenceId)) {
  146. return false;
  147. }
  148. return true;
  149. }
  150.  
  151. }
  152.  
  153. @Entity
  154. @IdClass(SamplingsPK.class)
  155. @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  156. public static class Samplings {
  157.  
  158. @Id
  159. private int year;
  160.  
  161. @Id
  162. @GeneratedValue
  163. private Integer sequenceId;
  164.  
  165. @OneToMany(mappedBy = "sampling", cascade = CascadeType.ALL, orphanRemoval = true)
  166. private List<Samples> samples = new ArrayList<>();
  167.  
  168. public int getYear() {
  169. return year;
  170. }
  171.  
  172. public void setYear(int year) {
  173. this.year = year;
  174. }
  175.  
  176. public Integer getSequenceId() {
  177. return sequenceId;
  178. }
  179.  
  180. public void setSequenceId(Integer sequenceId) {
  181. this.sequenceId = sequenceId;
  182. }
  183.  
  184. public List<Samples> getSamples() {
  185. return samples;
  186. }
  187.  
  188. public void setSamples(List<Samples> samples) {
  189. this.samples = samples;
  190. }
  191.  
  192. public void addSample(Samples samples) {
  193. getSamples().add(samples);
  194. }
  195.  
  196. }
  197.  
  198. public static class SamplesPK implements Serializable {
  199.  
  200. private String sampleLetter;
  201.  
  202. private SamplingsPK sampling;
  203.  
  204. public SamplesPK(SamplingsPK sampling, String sampleLetter) {
  205. this.sampling = sampling;
  206. this.sampleLetter = sampleLetter;
  207. }
  208.  
  209. private SamplesPK() {
  210.  
  211. }
  212.  
  213. }
  214.  
  215. @Entity
  216. @IdClass(SamplesPK.class)
  217. public static class Samples {
  218.  
  219. @Id
  220. private String sampleLetter;
  221.  
  222. @Id
  223. @ManyToOne(optional = false)
  224. @JoinColumns({
  225. @JoinColumn(name = "sampling_id", referencedColumnName = "sequenceId"),
  226. @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
  227. private Samplings sampling;
  228.  
  229. @OneToOne(mappedBy = "sample", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
  230. private TestSamples testSamples;
  231.  
  232. public String getSampleLetter() {
  233. return sampleLetter;
  234. }
  235.  
  236. public void setSampleLetter(String sampleLetter) {
  237. this.sampleLetter = sampleLetter;
  238. }
  239.  
  240. public Samplings getSampling() {
  241. return sampling;
  242. }
  243.  
  244. public void setSampling(Samplings sampling) {
  245. this.sampling = sampling;
  246. }
  247.  
  248. public TestSamples getTestSamples() {
  249. return testSamples;
  250. }
  251.  
  252. public void setTestSamples(TestSamples testSamples) {
  253. this.testSamples = testSamples;
  254. }
  255.  
  256. }
  257.  
  258. @Entity
  259. public static class TestSamples {
  260.  
  261. @Id
  262. @SequenceGenerator(name = "test_samples_id_seq", sequenceName = "test_samples_id_seq", allocationSize = 1)
  263. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "test_samples_id_seq")
  264. private Integer id;
  265.  
  266. @OneToOne(fetch = FetchType.LAZY)
  267. private Samples sample;
  268.  
  269. public Integer getId() {
  270. return id;
  271. }
  272.  
  273. public void setId(Integer id) {
  274. this.id = id;
  275. }
  276.  
  277. public Samples getSample() {
  278. return sample;
  279. }
  280.  
  281. public void setSample(Samples sample) {
  282. this.sample = sample;
  283. }
  284.  
  285. @Override
  286. public String toString() {
  287. return "TestSamples [id=" + id + "]";
  288. }
  289. }
  290.  
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement