/tests/com/google/appengine/datanucleus/test/SubclassesJPA.java

http://datanucleus-appengine.googlecode.com/ · Java · 375 lines · 275 code · 82 blank · 18 comment · 0 complexity · 5c2da790fcf73980aa19344ba2bd2330 MD5 · raw file

  1. /**********************************************************************
  2. Copyright (c) 2009 Google Inc.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. **********************************************************************/
  13. package com.google.appengine.datanucleus.test;
  14. import javax.persistence.AttributeOverride;
  15. import javax.persistence.AttributeOverrides;
  16. import javax.persistence.Column;
  17. import javax.persistence.DiscriminatorColumn;
  18. import javax.persistence.Embeddable;
  19. import javax.persistence.Embedded;
  20. import javax.persistence.Entity;
  21. import javax.persistence.GeneratedValue;
  22. import javax.persistence.GenerationType;
  23. import javax.persistence.Id;
  24. import javax.persistence.Inheritance;
  25. import javax.persistence.InheritanceType;
  26. import javax.persistence.MappedSuperclass;
  27. /**
  28. * @author Max Ross <maxr@google.com>
  29. */
  30. public class SubclassesJPA {
  31. public interface Parent {
  32. Long getId();
  33. void setAString(String val);
  34. String getAString();
  35. }
  36. public interface Child extends Parent {
  37. void setBString(String val);
  38. String getBString();
  39. }
  40. public interface Grandchild extends Child {
  41. void setCString(String val);
  42. String getCString();
  43. }
  44. @Entity
  45. @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
  46. public static class TablePerClass implements Parent {
  47. @Id
  48. @GeneratedValue(strategy= GenerationType.IDENTITY)
  49. private Long id;
  50. private String aString;
  51. public Long getId() {
  52. return id;
  53. }
  54. public void setAString(String aString) {
  55. this.aString = aString;
  56. }
  57. public String getAString() {
  58. return aString;
  59. }
  60. }
  61. @Entity
  62. public static class TablePerClassChild extends TablePerClass implements Child {
  63. private String bString;
  64. public void setBString(String bString) {
  65. this.bString = bString;
  66. }
  67. public String getBString() {
  68. return bString;
  69. }
  70. }
  71. @Entity
  72. public static class TablePerClassGrandchild extends TablePerClassChild implements Grandchild {
  73. private String cString;
  74. public void setCString(String cString) {
  75. this.cString = cString;
  76. }
  77. public String getCString() {
  78. return cString;
  79. }
  80. }
  81. @Entity
  82. @Inheritance(strategy = InheritanceType.JOINED)
  83. public static class Joined implements Parent {
  84. @Id
  85. @GeneratedValue(strategy = GenerationType.IDENTITY)
  86. private Long id;
  87. private String aString;
  88. public Long getId() {
  89. return id;
  90. }
  91. public void setAString(String aString) {
  92. this.aString = aString;
  93. }
  94. public String getAString() {
  95. return aString;
  96. }
  97. }
  98. @Entity
  99. public static class JoinedChild extends Joined implements Child {
  100. private String bString;
  101. public void setBString(String bString) {
  102. this.bString = bString;
  103. }
  104. public String getBString() {
  105. return bString;
  106. }
  107. }
  108. @Entity
  109. @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  110. @DiscriminatorColumn(name = "TYPE")
  111. public static class SingleTable implements Parent {
  112. @Id
  113. @GeneratedValue(strategy = GenerationType.IDENTITY)
  114. private Long id;
  115. private String aString;
  116. public Long getId() {
  117. return id;
  118. }
  119. public void setAString(String aString) {
  120. this.aString = aString;
  121. }
  122. public String getAString() {
  123. return aString;
  124. }
  125. }
  126. @Entity
  127. public static class SingleTableChild extends SingleTable implements Child {
  128. private String bString;
  129. public void setBString(String bString) {
  130. this.bString = bString;
  131. }
  132. public String getBString() {
  133. return bString;
  134. }
  135. }
  136. @MappedSuperclass
  137. public static class MappedSuperclassParent implements Parent {
  138. @Id
  139. @GeneratedValue(strategy = GenerationType.IDENTITY)
  140. private Long id;
  141. private String aString;
  142. private String overriddenString;
  143. public Long getId() {
  144. return id;
  145. }
  146. public void setAString(String aString) {
  147. this.aString = aString;
  148. }
  149. public String getAString() {
  150. return aString;
  151. }
  152. public String getOverriddenString() {
  153. return overriddenString;
  154. }
  155. public void setOverriddenString(String overriddenString) {
  156. this.overriddenString = overriddenString;
  157. }
  158. }
  159. @Entity
  160. @AttributeOverride(name = "overriddenString", column = @Column(name = "overridden_string"))
  161. public static class MappedSuperclassChild extends MappedSuperclassParent implements Child {
  162. private String bString;
  163. public void setBString(String bString) {
  164. this.bString = bString;
  165. }
  166. public String getBString() {
  167. return bString;
  168. }
  169. }
  170. @Entity
  171. @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
  172. public static class TablePerClassParentWithEmbedded implements Parent {
  173. @Id
  174. @GeneratedValue(strategy = GenerationType.IDENTITY)
  175. private Long id;
  176. @Embedded
  177. private IsEmbeddedWithEmbeddedSuperclass embedded;
  178. @Embedded
  179. @AttributeOverrides({@AttributeOverride(name="val0", column=@Column(name="VAL0"))})
  180. private IsEmbeddedBase embeddedBase;
  181. private String aString;
  182. public Long getId() {
  183. return id;
  184. }
  185. public IsEmbeddedWithEmbeddedSuperclass getEmbedded() {
  186. return embedded;
  187. }
  188. public void setEmbedded(IsEmbeddedWithEmbeddedSuperclass embedded) {
  189. this.embedded = embedded;
  190. }
  191. public String getAString() {
  192. return aString;
  193. }
  194. public void setAString(String aString) {
  195. this.aString = aString;
  196. }
  197. public IsEmbeddedBase getEmbeddedBase() {
  198. return embeddedBase;
  199. }
  200. public void setEmbeddedBase(IsEmbeddedBase embeddedBase) {
  201. this.embeddedBase = embeddedBase;
  202. }
  203. }
  204. @Entity
  205. public static class ChildEmbeddedInTablePerClass extends TablePerClassParentWithEmbedded {
  206. private String bString;
  207. @Embedded
  208. @AttributeOverrides({@AttributeOverride(name="val2", column=@Column(name="VAL2"))})
  209. private IsEmbeddedBase2 embeddedBase2;
  210. @Embedded
  211. private IsEmbeddedWithEmbeddedSuperclass2 embedded2;
  212. public void setBString(String bString) {
  213. this.bString = bString;
  214. }
  215. public String getBString() {
  216. return bString;
  217. }
  218. public IsEmbeddedWithEmbeddedSuperclass2 getEmbedded2() {
  219. return embedded2;
  220. }
  221. public void setEmbedded2(IsEmbeddedWithEmbeddedSuperclass2 embedded2) {
  222. this.embedded2 = embedded2;
  223. }
  224. public IsEmbeddedBase2 getEmbeddedBase2() {
  225. return embeddedBase2;
  226. }
  227. public void setEmbeddedBase2(IsEmbeddedBase2 embeddedBase2) {
  228. this.embeddedBase2 = embeddedBase2;
  229. }
  230. }
  231. @Embeddable
  232. @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
  233. public static class IsEmbeddedBase2 {
  234. private String val2;
  235. public String getVal2() {
  236. return val2;
  237. }
  238. public void setVal2(String val2) {
  239. this.val2 = val2;
  240. }
  241. }
  242. @Embeddable
  243. @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
  244. public static class IsEmbeddedBase {
  245. private String val0;
  246. public String getVal0() {
  247. return val0;
  248. }
  249. public void setVal0(String val0) {
  250. this.val0 = val0;
  251. }
  252. }
  253. public static class NondurableParent {
  254. private Long id;
  255. private String str;
  256. public Long getId() {
  257. return id;
  258. }
  259. public void setId(Long id) {
  260. this.id = id;
  261. }
  262. public String getStr() {
  263. return str;
  264. }
  265. public void setStr(String str) {
  266. this.str = str;
  267. }
  268. }
  269. @Entity
  270. public static class DurableChild extends NondurableParent {
  271. @Override
  272. @Id
  273. @GeneratedValue(strategy = GenerationType.IDENTITY)
  274. public Long getId() {
  275. return super.getId();
  276. }
  277. @Override
  278. public String getStr() {
  279. return super.getStr();
  280. }
  281. @Override
  282. public void setId(Long id) {
  283. super.setId(id);
  284. }
  285. @Override
  286. public void setStr(String str) {
  287. super.setStr(str);
  288. }
  289. }
  290. }