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

http://datanucleus-appengine.googlecode.com/ · Java · 642 lines · 505 code · 119 blank · 18 comment · 0 complexity · a9dc9b42df70dc116c68bd2dd3bb8b6a 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 com.google.appengine.api.datastore.Key;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import javax.jdo.annotations.Extension;
  18. import javax.jdo.annotations.Extensions;
  19. import javax.jdo.annotations.IdGeneratorStrategy;
  20. import javax.jdo.annotations.IdentityType;
  21. import javax.jdo.annotations.Inheritance;
  22. import javax.jdo.annotations.Order;
  23. import javax.jdo.annotations.PersistenceCapable;
  24. import javax.jdo.annotations.Persistent;
  25. import javax.jdo.annotations.PrimaryKey;
  26. /**
  27. * @author Max Ross <maxr@google.com>
  28. */
  29. public class IllegalMappingsJDO {
  30. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  31. public static class HasLongPkWithKeyAncestor {
  32. @SuppressWarnings("unused")
  33. @PrimaryKey
  34. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  35. private Long id;
  36. @SuppressWarnings("unused")
  37. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
  38. @Persistent
  39. private Key illegal;
  40. }
  41. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  42. public static class HasLongPkWithStringAncestor {
  43. @SuppressWarnings("unused")
  44. @PrimaryKey
  45. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  46. private Long id;
  47. @SuppressWarnings("unused")
  48. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
  49. @Persistent
  50. private String illegal;
  51. }
  52. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  53. public static class HasUnencodedStringPkWithKeyAncestor {
  54. @PrimaryKey
  55. public String id;
  56. @SuppressWarnings("unused")
  57. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
  58. @Persistent
  59. private Key illegal;
  60. }
  61. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  62. public static class HasUnencodedStringPkWithStringAncestor {
  63. @PrimaryKey
  64. public String id;
  65. @SuppressWarnings("unused")
  66. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
  67. @Persistent
  68. private String illegal;
  69. }
  70. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  71. public static class HasMultiplePkNameFields {
  72. @SuppressWarnings("unused")
  73. @PrimaryKey
  74. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  75. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  76. private String id;
  77. @SuppressWarnings("unused")
  78. @Extension(vendorName = "datanucleus", key = "gae.pk-name", value = "true")
  79. @Persistent
  80. private String firstIsOk;
  81. @SuppressWarnings("unused")
  82. @Extension(vendorName = "datanucleus", key = "gae.pk-name", value = "true")
  83. @Persistent
  84. private String secondIsIllegal;
  85. }
  86. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  87. public static class HasMultiplePkIdFields {
  88. @SuppressWarnings("unused")
  89. @PrimaryKey
  90. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  91. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  92. private String id;
  93. @SuppressWarnings("unused")
  94. @Extension(vendorName = "datanucleus", key = "gae.pk-id", value = "true")
  95. @Persistent
  96. private Long firstIsOk;
  97. @SuppressWarnings("unused")
  98. @Extension(vendorName = "datanucleus", key = "gae.pk-id", value = "true")
  99. @Persistent
  100. private Long secondIsIllegal;
  101. }
  102. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  103. public static class MultipleAncestors {
  104. @SuppressWarnings("unused")
  105. @PrimaryKey
  106. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  107. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  108. private String id;
  109. @SuppressWarnings("unused")
  110. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
  111. @Persistent
  112. private String firstIsOk;
  113. @SuppressWarnings("unused")
  114. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
  115. @Persistent
  116. private String secondIsIllegal;
  117. }
  118. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  119. public static class EncodedPkOnNonPrimaryKeyField {
  120. @PrimaryKey
  121. public String id;
  122. @SuppressWarnings("unused")
  123. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  124. @Persistent
  125. private String illegal;
  126. }
  127. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  128. public static class EncodedPkOnNonStringPrimaryKeyField {
  129. @SuppressWarnings("unused")
  130. @PrimaryKey
  131. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  132. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  133. private Long id;
  134. }
  135. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  136. public static class PkNameOnNonStringField {
  137. @SuppressWarnings("unused")
  138. @PrimaryKey
  139. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  140. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  141. private String id;
  142. @SuppressWarnings("unused")
  143. @Persistent
  144. @Extension(vendorName = "datanucleus", key = "gae.pk-name", value = "true")
  145. private Long illegal;
  146. }
  147. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  148. public static class PkIdOnNonLongField {
  149. @SuppressWarnings("unused")
  150. @PrimaryKey
  151. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  152. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  153. private String id;
  154. @SuppressWarnings("unused")
  155. @Persistent
  156. @Extension(vendorName = "datanucleus", key = "gae.pk-id", value = "true")
  157. private String illegal;
  158. }
  159. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  160. public static class PkMarkedAsAncestor {
  161. @SuppressWarnings("unused")
  162. @PrimaryKey
  163. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  164. @Extensions({
  165. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true"),
  166. @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")}
  167. )
  168. private String illegal;
  169. }
  170. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  171. public static class PkMarkedAsPkId {
  172. @SuppressWarnings("unused")
  173. @PrimaryKey
  174. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  175. @Extension(vendorName = "datanucleus", key = "gae.pk-id", value = "true")
  176. private Long illegal;
  177. }
  178. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  179. public static class PkMarkedAsPkName {
  180. @SuppressWarnings("unused")
  181. @PrimaryKey
  182. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  183. @Extension(vendorName = "datanucleus", key = "gae.pk-name", value = "true")
  184. private String illegal;
  185. }
  186. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  187. public static class PkIdWithUnencodedStringPrimaryKey {
  188. @PrimaryKey
  189. public String id;
  190. @SuppressWarnings("unused")
  191. @Persistent
  192. @Extension(vendorName = "datanucleus", key = "gae.pk-id", value = "true")
  193. private Long illegal;
  194. }
  195. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  196. public static class PkNameWithUnencodedStringPrimaryKey {
  197. @PrimaryKey
  198. public String id;
  199. @SuppressWarnings("unused")
  200. @Persistent
  201. @Extension(vendorName = "datanucleus", key = "gae.pk-name", value = "true")
  202. private String illegal;
  203. }
  204. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  205. public static class OneToManyParentWithRootOnlyLongUniChild {
  206. @PrimaryKey
  207. public String id;
  208. @SuppressWarnings("unused")
  209. @Persistent
  210. private List<HasLongPkJDO> uniChildren = new ArrayList<HasLongPkJDO>();
  211. }
  212. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  213. public static class OneToManyParentWithRootOnlyLongBiChild {
  214. @PrimaryKey
  215. public String id;
  216. @SuppressWarnings("unused")
  217. @Persistent(mappedBy = "parent")
  218. private List<RootOnlyLongBiOneToManyChild> biChildren = new ArrayList<RootOnlyLongBiOneToManyChild>();
  219. }
  220. @SuppressWarnings("unused")
  221. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  222. public static class RootOnlyLongBiOneToManyChild {
  223. @PrimaryKey
  224. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  225. private Long id;
  226. @Persistent
  227. private OneToManyParentWithRootOnlyLongBiChild parent;
  228. }
  229. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  230. public static class OneToManyParentWithRootOnlyStringUniChild {
  231. @PrimaryKey
  232. public String id;
  233. @SuppressWarnings("unused")
  234. @Persistent
  235. private List<HasUnencodedStringPkJDO> uniChildren = new ArrayList<HasUnencodedStringPkJDO>();
  236. }
  237. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  238. public static class OneToManyParentWithRootOnlyStringBiChild {
  239. @PrimaryKey
  240. public String id;
  241. @SuppressWarnings("unused")
  242. @Persistent(mappedBy = "parent")
  243. private List<RootOnlyStringBiOneToManyChild> biChildren = new ArrayList<RootOnlyStringBiOneToManyChild>();
  244. }
  245. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  246. public static class RootOnlyStringBiOneToManyChild {
  247. @PrimaryKey
  248. public String id;
  249. @SuppressWarnings("unused")
  250. @Persistent
  251. private OneToManyParentWithRootOnlyStringBiChild parent;
  252. }
  253. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  254. public static class OneToOneParentWithRootOnlyLongUniChild {
  255. @PrimaryKey
  256. public String id;
  257. @SuppressWarnings("unused")
  258. @Persistent
  259. private HasLongPkJDO uniChild;
  260. }
  261. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  262. public static class OneToOneParentWithRootOnlyLongBiChild {
  263. @PrimaryKey
  264. public String id;
  265. @SuppressWarnings("unused")
  266. private RootOnlyLongBiOneToManyChild biChild;
  267. }
  268. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  269. public static class RootOnlyLongBiOneToOneChild {
  270. @SuppressWarnings("unused")
  271. @PrimaryKey
  272. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  273. private Long id;
  274. @SuppressWarnings("unused")
  275. @Persistent(mappedBy = "biChild")
  276. private OneToOneParentWithRootOnlyLongBiChild parent;
  277. }
  278. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  279. public static class OneToOneParentWithRootOnlyStringUniChild {
  280. @PrimaryKey
  281. public String id;
  282. @SuppressWarnings("unused")
  283. @Persistent
  284. private HasUnencodedStringPkJDO uniChild;
  285. }
  286. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  287. public static class OneToOneParentWithRootOnlyStringBiChild {
  288. @PrimaryKey
  289. public String id;
  290. @SuppressWarnings("unused")
  291. @Persistent
  292. private RootOnlyStringBiOneToManyChild biChild;
  293. }
  294. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  295. public static class RootOnlyStringBiOneToOneChild {
  296. @PrimaryKey
  297. public String id;
  298. @SuppressWarnings("unused")
  299. @Persistent(mappedBy = "biChild")
  300. private OneToOneParentWithRootOnlyStringBiChild parent;
  301. }
  302. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  303. public static class LongParent {
  304. @SuppressWarnings("unused")
  305. @PrimaryKey
  306. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  307. private Long id;
  308. @SuppressWarnings("unused")
  309. @Persistent
  310. @Extension(vendorName = "datanucleus", key="gae.parent-pk", value="true")
  311. private Long illegal;
  312. }
  313. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  314. public static class ManyToMany1 {
  315. @SuppressWarnings("unused")
  316. @PrimaryKey
  317. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  318. private Key id;
  319. @SuppressWarnings("unused")
  320. @Persistent(mappedBy = "manyToMany")
  321. private List<ManyToMany2> manyToMany;
  322. }
  323. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  324. public static class ManyToMany2 {
  325. @SuppressWarnings("unused")
  326. @PrimaryKey
  327. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  328. private Key id;
  329. @SuppressWarnings("unused")
  330. @Persistent(mappedBy = "manyToMany")
  331. private List<ManyToMany1> manyToMany;
  332. }
  333. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  334. public static class SequenceOnEncodedStringPk {
  335. @SuppressWarnings("unused")
  336. @PrimaryKey
  337. @Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE)
  338. @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
  339. private String id;
  340. }
  341. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  342. public static class SequenceOnKeyPk {
  343. @SuppressWarnings("unused")
  344. @PrimaryKey
  345. @Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE)
  346. private Key id;
  347. }
  348. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  349. public static class Has2CollectionsOfSameType {
  350. @SuppressWarnings("unused")
  351. @PrimaryKey
  352. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  353. private Key id;
  354. @SuppressWarnings("unused")
  355. @Persistent
  356. private List<Flight> flights1;
  357. @SuppressWarnings("unused")
  358. @Persistent
  359. private List<Flight> flights2;
  360. }
  361. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  362. public static class Has2OneToOnesOfSameType {
  363. @SuppressWarnings("unused")
  364. @PrimaryKey
  365. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  366. private Key id;
  367. @SuppressWarnings("unused")
  368. @Persistent
  369. private Flight f1;
  370. @SuppressWarnings("unused")
  371. @Persistent
  372. private Flight f2;
  373. }
  374. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  375. public static class HasOneToOneAndOneToManyOfSameType {
  376. @SuppressWarnings("unused")
  377. @PrimaryKey
  378. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  379. private Key id;
  380. @SuppressWarnings("unused")
  381. @Persistent
  382. private List<Flight> flights;
  383. @SuppressWarnings("unused")
  384. @Persistent
  385. private Flight f2;
  386. }
  387. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  388. @Inheritance(customStrategy = "complete-table")
  389. public static class Has2CollectionsOfSameTypeParent {
  390. @SuppressWarnings("unused")
  391. @PrimaryKey
  392. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  393. private Key id;
  394. @SuppressWarnings("unused")
  395. @Persistent
  396. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name DESC"))
  397. private List<Flight> flights1;
  398. }
  399. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  400. public static class Has2CollectionsOfSameTypeChild extends Has2CollectionsOfSameTypeParent {
  401. @SuppressWarnings("unused")
  402. @Persistent
  403. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name DESC"))
  404. private List<Flight> flights2;
  405. }
  406. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  407. @Inheritance(customStrategy = "complete-table")
  408. public static class Has2CollectionsOfAssignableBaseTypeSuper {
  409. @SuppressWarnings("unused")
  410. @PrimaryKey
  411. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  412. private Key id;
  413. @SuppressWarnings("unused")
  414. @Persistent
  415. private String name;
  416. }
  417. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  418. public static class Has2CollectionsOfAssignableBaseTypeSub extends Has2CollectionsOfAssignableBaseTypeSuper {
  419. @SuppressWarnings("unused")
  420. private String str;
  421. }
  422. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  423. public static class Has2CollectionsOfAssignableType {
  424. @SuppressWarnings("unused")
  425. @PrimaryKey
  426. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  427. private Key id;
  428. @SuppressWarnings("unused")
  429. @Persistent
  430. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name DESC"))
  431. private List<Has2CollectionsOfAssignableBaseTypeSuper> superList;
  432. @SuppressWarnings("unused")
  433. @Persistent
  434. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name DESC"))
  435. private List<Has2CollectionsOfAssignableBaseTypeSub> subList;
  436. }
  437. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  438. @Inheritance(customStrategy = "complete-table")
  439. public static class Has2CollectionsOfAssignableTypeSuper {
  440. @SuppressWarnings("unused")
  441. @PrimaryKey
  442. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  443. private Key id;
  444. @SuppressWarnings("unused")
  445. @Persistent
  446. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name DESC"))
  447. private List<Has2CollectionsOfAssignableBaseTypeSuper> superList;
  448. }
  449. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  450. public static class Has2CollectionsOfAssignableTypeSub extends Has2CollectionsOfAssignableTypeSuper {
  451. @SuppressWarnings("unused")
  452. @Persistent
  453. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name DESC"))
  454. private List<Has2CollectionsOfAssignableBaseTypeSub> subList;
  455. }
  456. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  457. public static class HasTwoOneToOnesWithSharedBaseClass {
  458. @SuppressWarnings("unused")
  459. @PrimaryKey
  460. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  461. private Long id;
  462. @Persistent
  463. private HasSharedBaseClass1 hsbc1;
  464. @Persistent
  465. private HasSharedBaseClass2 hsbc2;
  466. public HasSharedBaseClass1 getHsbc1() {
  467. return hsbc1;
  468. }
  469. public void setHsbc1(HasSharedBaseClass1 hsbc1) {
  470. this.hsbc1 = hsbc1;
  471. }
  472. public HasSharedBaseClass2 getHsbc2() {
  473. return hsbc2;
  474. }
  475. public void setHsbc2(HasSharedBaseClass2 hsbc2) {
  476. this.hsbc2 = hsbc2;
  477. }
  478. }
  479. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  480. public abstract static class SharedBaseClass {
  481. @SuppressWarnings("unused")
  482. @PrimaryKey
  483. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  484. private Key id;
  485. }
  486. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  487. @Inheritance(customStrategy = "complete-table")
  488. public static class HasSharedBaseClass1 extends SharedBaseClass {
  489. @SuppressWarnings("unused")
  490. private String str;
  491. }
  492. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  493. @Inheritance(customStrategy = "complete-table")
  494. public static class HasSharedBaseClass2 extends SharedBaseClass {
  495. @SuppressWarnings("unused")
  496. private String str;
  497. }
  498. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  499. public static class HasPkIdSortOnOneToMany {
  500. @SuppressWarnings("unused")
  501. @PrimaryKey
  502. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  503. private Key id;
  504. @SuppressWarnings("unused")
  505. @Persistent
  506. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="id"))
  507. private List<HasEncodedStringPkSeparateIdFieldJDO> list;
  508. }
  509. @PersistenceCapable(identityType = IdentityType.APPLICATION)
  510. public static class HasPkNameSortOnOneToMany {
  511. @SuppressWarnings("unused")
  512. @PrimaryKey
  513. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  514. private Key id;
  515. @SuppressWarnings("unused")
  516. @Persistent
  517. @Order(extensions = @Extension(vendorName = "datanucleus", key="list-ordering", value="name"))
  518. private List<HasEncodedStringPkSeparateNameFieldJDO> list;
  519. }
  520. }