Author: stliu
Date: 2009-11-24 16:03:15 -0500 (Tue, 24 Nov 2009)
New Revision: 18049
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320b.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AlternativeNamingStrategy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AmericaCupClass.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Company.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/ConfigurationTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Country.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Customer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Discount.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/EntityTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Flight.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/FlyingObject.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/IncorrectEntity.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/JoinedSubclassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Passport.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Plane.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Port.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/RequiresDialect.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SafeMappingTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SecuredBindingTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Sky.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TestCase.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Thing.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ticket.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TicketComparator.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/AccessTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Bed.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/BigBed.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Chair.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Furniture.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Gardenshed.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Thingy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Woody.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/AnyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/CharProperty.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/IntegerProperty.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/LongProperty.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/Property.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyList.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertySet.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/StringProperty.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/package-info.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Competitor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Contest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/BackquoteTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Bug.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Category.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Tool.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/CascadeTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Mouth.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Tooth.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/A.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/AId.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/B.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/C.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Channel.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Child.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ChildPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/CompositeIdTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/LittleGenius.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Order.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLine.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLinePk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Parent.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ParentPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Presenter.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Product.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazin.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazinPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgram.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgramIdClass.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Boy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Brand.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Character.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CountryAttitude.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Matrix.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/TestCourse.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Toy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/A.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/B.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/C.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/DeepCollectionElementTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Contact.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/IndexedCollectionOfElementsTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Sale.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/ConfigurationTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/orm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/package-info.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/Flight.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/orm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Address.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/AddressType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Book.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/CorpType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Country.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Deal.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/EmbeddedTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FixedLeg.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FloatLeg.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/InternetProvider.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Leg.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/LegalStructure.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Manager.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Nationality.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/NotonialDeal.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Person.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticle.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticlePk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/SpreadDeal.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Summary.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Swap.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/VanillaSwap.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Address.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Bid.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CasterStringType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CommunityBid.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Country.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Flight.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Forest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Java5FeaturesTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Length.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmount.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Race.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Ransom.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Starred.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Tree.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/WashingMachine.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/ZipCode.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/package-info.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Cellular.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Communication.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/GSM.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Interaction.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Phone.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Voice.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Branch.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/FetchingTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Leaf.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Person.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Stay.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A_PK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/B.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/C.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassA.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassB.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassC.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassD.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D_PK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/FkCircularityTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Classes.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/DNA.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Dummy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Gene.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/GenericsTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Item.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Paper.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PaperType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Price.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PricedStuff.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/SomeGuy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/State.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/StateType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Stuff.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/WildEntity.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Child.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Parent.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/hibernate.cfg.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/EnumIdTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdClassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/JoinColumnOverrideTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/UUIDGenerator.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Ball.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/BreakDance.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Bunny.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Computer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Department.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Dog.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FirTree.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Footballer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FootballerPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Furniture.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/GoalKeeper.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Home.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Location.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/MilitaryBuilding.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Monkey.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Phone.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Planet.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PlanetCheatSheet.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PointyTooth.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Shoe.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/SoundSystem.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Store.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tower.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tree.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/TwinkleToes.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/package-info.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/EnumIdTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdClassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/JoinColumnOverrideTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/UUIDGenerator.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Ball.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/BreakDance.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Bunny.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Computer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Department.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Dog.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FirTree.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Footballer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FootballerPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Furniture.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/GoalKeeper.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Home.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Location.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/MilitaryBuilding.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Monkey.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Phone.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Planet.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PlanetCheatSheet.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PointyTooth.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Shoe.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/SoundSystem.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Store.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tower.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tree.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/TwinkleToes.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/package-info.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Passport.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Stamp.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItems.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItemsPK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Card.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardField.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardKey.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customers.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/IdManyToOneTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Project.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBaskets.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBasketsPK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Store.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/A.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Acces.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalIdManyToOneTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalManyToOneTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/B.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/BId.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Benefserv.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/C.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/CId.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Droitacces.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Service.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Country.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Foobar.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/ImmutableTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/State.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressBook.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntry.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Drawer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Dress.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Gas.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GasKey.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Generation.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationGroup.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationUser.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/MapKeyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/News.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Newspaper.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painter.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painting.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PaintingPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Software.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Trainee.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Training.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Version.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Wardrobe.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Apple.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Carrot.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Fruit.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/SubclassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Tomato.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Vegetable.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/VegetablePk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Alarm.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Clothing.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Document.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/EventInformation.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/File.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Folder.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Parent.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Pool.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Sweater.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Document.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/File.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Folder.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Building.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Funk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/House.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Music.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Noise.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Rock.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Trash.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Document.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/File.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Folder.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/Contact.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/ContactImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/InterfacesTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/User.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/UserImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/A.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/B.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/C.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Cat.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Death.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Dog.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/DogPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/JoinTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Life.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Loader.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/LoaderTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Player.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Team.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Book.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/CompiledCode.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Editor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/LobTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Building.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/BuildingCompany.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Cat.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/CatPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/City.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Company.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Contractor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employee.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Friend.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Group.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/GroupWithSet.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Inspector.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/KnownClient.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Man.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManyToManyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Permission.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Store.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Supplier.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Woman.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/WomanPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Zone.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/BiggestForest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Car.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Carz.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Child.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Color.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Customer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Deal.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/DistrictUser.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ForestType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Frame.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lens.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lotz.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/LotzPK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Node.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/NodePk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Order.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/OrderLine.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Parent.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ParentPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/TreeType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/User.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/UserPK.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/GenericObject.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Item.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ManyToOneReferencedColumnNameTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Vendor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/WarehouseItem.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ZItemCost.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Address.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/DummyNamingStrategy.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/NamingStrategyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Person.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/Citizen.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/State.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Coin.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Currency.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Child.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/City.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Monkey.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OneToManyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Order.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderByTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderID.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItem.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItemID.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Organisation.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrganisationUser.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Parent.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/ParentPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Person.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/PoliticalParty.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Politician.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Soldier.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Street.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Tiger.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Trainer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Troop.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Address.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Body.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Client.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Computer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ComputerPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Heart.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneErrorTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Owner.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OwnerAddress.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Party.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumber.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumberPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Show.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ShowDescription.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Trousers.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/TrousersZip.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Address.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/NullablePrimaryKeyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Person.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/orm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/AssociationOverrideTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Location.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Move.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Trip.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Card.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/CollectionPersister.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Deck.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/EntityPersister.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/PersisterTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/Car.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/MovingThing.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/SportCar.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Area.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Captain.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/CasimirParticle.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Chaos.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dictionary.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dimensions.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Identity.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Mark.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Night.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/QueryAndSQLTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SpaceShip.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SynonymousDictionary.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/orm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/QuoteTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/Role.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/User.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Bag.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Clothes.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/House.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Item.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Luggage.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Postman.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Rambler.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Vendor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Administration.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Availability.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTrip.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTripPk.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Competition.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/LogListener.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Match.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Organization.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/OtherLogListener.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/TennisMatch.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/XMLContextTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/metadata-complete.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/orm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Location.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Storm.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/StrategyTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Component.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Machine.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Product.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Robot.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/T800.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Brand.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Luggage.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/LuggageImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Owner.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Size.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/SizeImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/TargetTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Country.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Cuisine.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/ProxyHelper.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/TuplizerTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/Dvd.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOid.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidGenerator.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/TypeTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Antenna.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Conductor.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/GeneratedTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/IndexTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/ProfessionalAgreement.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Truck.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Vehicule.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/VersionTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/CarModel.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Light.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Lighter.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Model.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm2.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm3.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/AImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/BImpl.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmWithIdentityTest.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Sky.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Z.java
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/ZImpl.java
Removed:
annotations/branches/v3_4_0_GA_CP/src/test/org/
Log:
JBPAPP-3150 change the build tool of Hibernate Annotations(eap 5 cp branch)
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,23 @@
+//$Id: A320.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@DiscriminatorValue("A320")
+@Entity()
+public class A320 extends Plane {
+ private String javaEmbeddedVersion;
+
+ public String getJavaEmbeddedVersion() {
+ return javaEmbeddedVersion;
+ }
+
+ public void setJavaEmbeddedVersion(String string) {
+ javaEmbeddedVersion = string;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320b.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320b.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/A320b.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+//$Id: A320b.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class A320b extends A320 {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AlternativeNamingStrategy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AlternativeNamingStrategy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AlternativeNamingStrategy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: AlternativeNamingStrategy.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import org.hibernate.cfg.EJB3NamingStrategy;
+import org.hibernate.cfg.NamingStrategy;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AlternativeNamingStrategy extends EJB3NamingStrategy {
+ public static NamingStrategy INSTANCE = new AlternativeNamingStrategy();
+
+ public String classToTableName(String className) {
+ return tableName( StringHelper.unqualify( className ) );
+ }
+
+ public String propertyToColumnName(String propertyName) {
+ return columnName( StringHelper.unqualify( propertyName ) );
+ }
+
+ public String tableName(String tableName) {
+ return "table_" + tableName;
+ }
+
+ public String columnName(String columnName) {
+ return "f_" + columnName;
+ }
+
+ public String propertyToTableName(String className, String propertyName) {
+ return tableName( StringHelper.unqualify( className ) + "_" +
StringHelper.unqualify( propertyName ) );
+ }
+
+ public String logicalColumnName(String columnName, String propertyName) {
+ return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName;
+ }
+
+ public String collectionTableName(
+ String ownerEntity, String ownerEntityTable, String associatedEntity, String
associatedEntityTable,
+ String propertyName
+ ) {
+ return tableName(
+ new StringBuilder( ownerEntityTable ).append( "_" )
+ .append(
+ associatedEntityTable != null ?
+ associatedEntityTable :
+ StringHelper.unqualify( propertyName )
+ ).toString()
+ );
+ }
+
+ public String logicalCollectionTablelName(
+ String tableName,
+ String ownerEntityTable, String associatedEntityTable, String propertyName
+ ) {
+ if ( tableName != null ) {
+ return tableName;
+ }
+ else {
+ //use of a stringbuffer to workaround a JDK bug
+ return new StringBuffer( ownerEntityTable ).append( "_" )
+ .append(
+ associatedEntityTable != null ?
+ associatedEntityTable :
+ StringHelper.unqualify( propertyName )
+ ).toString();
+ }
+ }
+
+ public String logicalCollectionColumnName(String columnName, String propertyName, String
referencedColumn) {
+ return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName +
"_" + referencedColumn;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AmericaCupClass.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AmericaCupClass.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/AmericaCupClass.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: AmericaCupClass.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@PrimaryKeyJoinColumn(name = "BOAT_ID")
+public class AmericaCupClass extends Boat {
+ private Country country;
+
+ @ManyToOne()
+ @JoinColumn(name = "COUNTRY_ID")
+ public Country getCountry() {
+ return country;
+ }
+
+ public void setCountry(Country country) {
+ this.country = country;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+
+ Used to demonstrate the declarative configuration
+ of both hbm files and annotated classes
+ See hibernate.cfg.xml and ConfigurationTest
+
+-->
+
+<hibernate-mapping package="org.hibernate.test.annotations">
+
+ <class name="Boat" table="BoatInXml">
+
+ <id name="id">
+ <generator class="native"/>
+ </id>
+
+ <property name="size" column="boat_size"/>
+
+ </class>
+
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Boat.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+//$Id: Boat.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+
+/**
+ * Boat class. Mapped in a Joined manner
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+@Inheritance(
+ strategy = InheritanceType.JOINED
+)
+public class Boat implements Serializable {
+ private Integer id;
+ private int size;
+ private int weight;
+
+ public Boat() {
+ super();
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ @Column(name = "boat_size")
+ public int getSize() {
+ return size;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+ public void setSize(int i) {
+ size = i;
+ }
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Company.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Company.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Company.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$Id: Company.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+/**
+ * Corporate like Air France
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity(name = "Corporation")
+public class Company implements Serializable {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ //should be treated as getter
+ private int[] getWorkingHoursPerWeek(Set<Date> holidayDays) {
+ return null;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/ConfigurationTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/ConfigurationTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/ConfigurationTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,155 @@
+//$Id: ConfigurationTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ConfigurationTest extends junit.framework.TestCase {
+ public void testDeclarativeMix() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ SessionFactory sf = cfg.buildSessionFactory();
+ assertNotNull( sf );
+ Session s = sf.openSession();
+ Transaction tx = s.beginTransaction();
+ Query q = s.createQuery( "from Boat" );
+ assertEquals( 0, q.list().size() );
+ q = s.createQuery( "from Plane" );
+ assertEquals( 0, q.list().size() );
+ tx.commit();
+ s.close();
+ sf.close();
+ }
+
+ public void testIgnoringHbm() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ cfg.setProperty( AnnotationConfiguration.ARTEFACT, "class, whatever" );
+ SessionFactory sf = cfg.buildSessionFactory();
+ assertNotNull( sf );
+ Session s = sf.openSession();
+ Transaction tx = s.beginTransaction();
+ Query q;
+ try {
+ s.createQuery( "from Boat" ).list();
+ fail( "Boat should not be mapped" );
+ }
+ catch (HibernateException e) {
+ //all good
+ }
+ q = s.createQuery( "from Plane" );
+ assertEquals( 0, q.list().size() );
+ tx.commit();
+ s.close();
+ sf.close();
+ }
+
+ public void testPrecedenceHbm() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ cfg.addAnnotatedClass( Boat.class );
+ SessionFactory sf = cfg.buildSessionFactory();
+ assertNotNull( sf );
+ Session s = sf.openSession();
+ s.getTransaction().begin();
+ Boat boat = new Boat();
+ boat.setSize( 12 );
+ boat.setWeight( 34 );
+ s.persist( boat );
+ s.getTransaction().commit();
+ s.clear();
+ Transaction tx = s.beginTransaction();
+ boat = (Boat) s.get( Boat.class, boat.getId() );
+ assertTrue( "Annotation has precedence", 34 != boat.getWeight() );
+ s.delete( boat );
+ //s.getTransaction().commit();
+ tx.commit();
+ s.close();
+ sf.close();
+ }
+
+ public void testPrecedenceAnnotation() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ cfg.setProperty( AnnotationConfiguration.ARTEFACT, "class, hbm" );
+ cfg.addAnnotatedClass( Boat.class );
+ SessionFactory sf = cfg.buildSessionFactory();
+ assertNotNull( sf );
+ Session s = sf.openSession();
+ s.getTransaction().begin();
+ Boat boat = new Boat();
+ boat.setSize( 12 );
+ boat.setWeight( 34 );
+ s.persist( boat );
+ s.getTransaction().commit();
+ s.clear();
+ Transaction tx = s.beginTransaction();
+ boat = (Boat) s.get( Boat.class, boat.getId() );
+ assertTrue( "Annotation has precedence", 34 == boat.getWeight() );
+ s.delete( boat );
+ tx.commit();
+ s.close();
+ sf.close();
+ }
+
+ public void testDeclarativeAnnWoAnnConfig() throws Exception {
+ Configuration cfg = new Configuration();
+ try {
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ fail( "Configuration object should fail when finding annotated elements
declarations" );
+ }
+ catch (MappingException e) {
+ //success
+ }
+ }
+
+ public void testHbmWithSubclassExtends() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ cfg.addClass( Ferry.class );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ SessionFactory sf = cfg.buildSessionFactory();
+ assertNotNull( sf );
+ Session s = sf.openSession();
+ Transaction tx = s.beginTransaction();
+ Query q = s.createQuery( "from Ferry" );
+ assertEquals( 0, q.list().size() );
+ q = s.createQuery( "from Plane" );
+ assertEquals( 0, q.list().size() );
+ tx.commit();
+ s.close();
+ sf.close();
+ }
+
+ public void testAnnReferencesHbm() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+ cfg.addAnnotatedClass( Port.class );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ SessionFactory sf = cfg.buildSessionFactory();
+ assertNotNull( sf );
+ Session s = sf.openSession();
+ Transaction tx = s.beginTransaction();
+ Query q = s.createQuery( "from Boat" );
+ assertEquals( 0, q.list().size() );
+ q = s.createQuery( "from Port" );
+ assertEquals( 0, q.list().size() );
+ tx.commit();
+ s.close();
+ sf.close();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Country.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Country.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Country.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: Country.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity()
+public class Country implements Serializable {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ public int hashCode() {
+ return name == null ? 0 : name.hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ if ( obj == this ) return true;
+ if ( ! ( obj instanceof Country ) ) return false;
+ Country that = (Country) obj;
+ if ( this.name == null ) return false;
+ return this.name.equals( that.name );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Customer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Customer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Customer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,88 @@
+//$Id: Customer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.SortedSet;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+
+import org.hibernate.annotations.Cascade;
+import static org.hibernate.annotations.CascadeType.ALL;
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.SortType;
+
+
+/**
+ * Company customer
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Customer implements Serializable {
+ Long id;
+ String name;
+ SortedSet<Ticket> tickets;
+ Collection discountTickets;
+ Passport passport;
+
+ public Customer() {
+ }
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+ @JoinColumn(name = "CUST_ID")
+ @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
+ public SortedSet<Ticket> getTickets() {
+ return tickets;
+ }
+
+ public void setTickets(SortedSet<Ticket> tickets) {
+ this.tickets = tickets;
+ }
+
+ @OneToMany(targetEntity = org.hibernate.test.annotations.Discount.class,
+ cascade = CascadeType.ALL, mappedBy = "owner")
+ @Cascade({ALL})
+ public Collection getDiscountTickets() {
+ return discountTickets;
+ }
+
+ public void setDiscountTickets(Collection collection) {
+ discountTickets = collection;
+ }
+
+ @OneToOne(cascade = CascadeType.ALL)
+ public Passport getPassport() {
+ return passport;
+ }
+
+ public void setPassport(Passport passport) {
+ this.passport = passport;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Discount.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Discount.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Discount.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+//$Id: Discount.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+/**
+ * Discount ticket a client can use when buying tickets
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Discount implements Serializable {
+
+ private Long id;
+ private double discount;
+ private Customer owner;
+
+
+ @Column(precision = 5, scale = 2)
+ public double getDiscount() {
+ return discount;
+ }
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setDiscount(double i) {
+ discount = i;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ @ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
+ @JoinColumn(name = "CUSTOMER_ID")
+ public Customer getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Customer customer) {
+ owner = customer;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/EntityTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/EntityTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/EntityTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,385 @@
+//$Id: EntityTest.java 16418 2009-04-23 09:55:33Z jcosta(a)redhat.com $
+package org.hibernate.test.annotations;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.StaleStateException;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityTest extends TestCase {
+
+ public EntityTest(String x) {
+ super( x );
+ }
+
+ public void testLoad() throws Exception {
+ //put an object in DB
+ assertEquals( "Flight", getCfg().getClassMapping( Flight.class.getName()
).getTable().getName() );
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Flight firstOne = new Flight();
+ firstOne.setId( new Long( 1 ) );
+ firstOne.setName( "AF3202" );
+ firstOne.setDuration( new Long( 1000000 ) );
+ firstOne.setDurationInSec( 2000 );
+ s.save( firstOne );
+ s.flush();
+ tx.commit();
+ s.close();
+
+ //read it
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+ assertNotNull( firstOne );
+ assertEquals( new Long( 1 ), firstOne.getId() );
+ assertEquals( "AF3202", firstOne.getName() );
+ assertEquals( new Long( 1000000 ), firstOne.getDuration() );
+ assertFalse( "Transient is not working", 2000l == firstOne.getDurationInSec()
);
+ tx.commit();
+ s.close();
+ }
+
+ public void testColumn() throws Exception {
+ //put an object in DB
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Flight firstOne = new Flight();
+ firstOne.setId( new Long( 1 ) );
+ firstOne.setName( "AF3202" );
+ firstOne.setDuration( new Long( 1000000 ) );
+ firstOne.setDurationInSec( 2000 );
+ s.save( firstOne );
+ s.flush();
+ tx.commit();
+ s.close();
+
+
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = new Flight();
+ firstOne.setId( new Long( 1 ) );
+ firstOne.setName( null );
+
+ try {
+ s.save( firstOne );
+ tx.commit();
+ fail( "Name column should be not null" );
+ }
+ catch (HibernateException e) {
+ //fine
+ }
+ finally {
+ s.close();
+ }
+
+ //insert an object and check that name is not updatable
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = new Flight();
+ firstOne.setId( new Long( 1 ) );
+ firstOne.setName( "AF3202" );
+ firstOne.setTriggeredData( "should not be insertable" );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+ assertNotNull( firstOne );
+ assertEquals( new Long( 1 ), firstOne.getId() );
+ assertEquals( "AF3202", firstOne.getName() );
+ assertFalse( "should not be insertable".equals( firstOne.getTriggeredData() )
);
+ firstOne.setName( "BA1234" );
+ firstOne.setTriggeredData( "should not be updatable" );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+ assertNotNull( firstOne );
+ assertEquals( new Long( 1 ), firstOne.getId() );
+ assertEquals( "AF3202", firstOne.getName() );
+ assertFalse( "should not be updatable".equals( firstOne.getTriggeredData() )
);
+ tx.commit();
+ s.close();
+ }
+
+ public void testColumnUnique() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Sky sky = new Sky();
+ sky.id = new Long( 2 );
+ sky.color = "blue";
+ sky.day = "monday";
+ sky.month = "January";
+
+ Sky sameSky = new Sky();
+ sameSky.id = new Long( 3 );
+ sameSky.color = "blue";
+ sky.day = "tuesday";
+ sky.month = "January";
+
+ try {
+ s.save( sky );
+ s.flush();
+ s.save( sameSky );
+ tx.commit();
+ fail( "unique constraints not respected" );
+ }
+ catch (HibernateException e) {
+ //success
+ }
+ finally {
+ if ( tx != null ) tx.rollback();
+ s.close();
+ }
+ }
+
+ public void testUniqueConstraint() throws Exception {
+ int id = 5;
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Sky sky = new Sky();
+ sky.id = new Long( id++ );
+ sky.color = "green";
+ sky.day = "monday";
+ sky.month = "March";
+
+ Sky otherSky = new Sky();
+ otherSky.id = new Long( id++ );
+ otherSky.color = "red";
+ otherSky.day = "friday";
+ otherSky.month = "March";
+
+ Sky sameSky = new Sky();
+ sameSky.id = new Long( id++ );
+ sameSky.color = "green";
+ sameSky.day = "monday";
+ sameSky.month = "March";
+
+ s.save( sky );
+ s.flush();
+
+ s.save( otherSky );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ try {
+ s.save( sameSky );
+ tx.commit();
+ fail( "unique constraints not respected" );
+ }
+ catch (HibernateException e) {
+ //success
+ }
+ finally {
+ if ( tx != null ) tx.rollback();
+ s.close();
+ }
+ }
+
+ public void testVersion() throws Exception {
+// put an object in DB
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Flight firstOne = new Flight();
+ firstOne.setId( new Long( 2 ) );
+ firstOne.setName( "AF3202" );
+ firstOne.setDuration( new Long( 500 ) );
+ s.save( firstOne );
+ s.flush();
+ tx.commit();
+ s.close();
+
+ //read it
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = (Flight) s.get( Flight.class, new Long( 2 ) );
+ tx.commit();
+ s.close();
+
+ //read it again
+ s = openSession();
+ tx = s.beginTransaction();
+ Flight concurrentOne = (Flight) s.get( Flight.class, new Long( 2 ) );
+ concurrentOne.setDuration( new Long( 1000 ) );
+ s.update( concurrentOne );
+ tx.commit();
+ s.close();
+ assertFalse( firstOne == concurrentOne );
+ assertFalse( firstOne.getVersion().equals( concurrentOne.getVersion() ) );
+
+ //reattach the first one
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne.setName( "Second access" );
+ s.update( firstOne );
+ try {
+ tx.commit();
+ fail( "Optimistic locking should work" );
+ }
+ catch (StaleStateException e) {
+ //fine
+ }
+ finally {
+ if ( tx != null ) tx.rollback();
+ s.close();
+ }
+
+ }
+
+ public void testFieldAccess() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Sky sky = new Sky();
+ sky.id = new Long( 1 );
+ sky.color = "black";
+ Sky.area = "Paris";
+ sky.day = "23";
+ sky.month = "1";
+ s.save( sky );
+ tx.commit();
+ s.close();
+ Sky.area = "London";
+
+ s = openSession();
+ tx = s.beginTransaction();
+ sky = (Sky) s.get( Sky.class, sky.id );
+ assertNotNull( sky );
+ assertEquals( "black", sky.color );
+ assertFalse( "Paris".equals( Sky.area ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEntityName() throws Exception {
+ assertEquals( "Corporation", getCfg().getClassMapping(
Company.class.getName() ).getTable().getName() );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Company comp = new Company();
+ s.persist( comp );
+ comp.setName( "JBoss Inc" );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ List result = s.createQuery( "from Corporation" ).list();
+ assertNotNull( result );
+ assertEquals( 1, result.size() );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testNonGetter() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Flight airFrance = new Flight();
+ airFrance.setId( new Long( 747 ) );
+ airFrance.setName( "Paris-Amsterdam" );
+ airFrance.setDuration( new Long( 10 ) );
+ airFrance.setFactor( 25 );
+ s.persist( airFrance );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ airFrance = (Flight) s.get( Flight.class, airFrance.getId() );
+ assertNotNull( airFrance );
+ assertEquals( new Long( 10 ), airFrance.getDuration() );
+ assertFalse( 25 == airFrance.getFactor( false ) );
+ s.delete( airFrance );
+ tx.commit();
+ s.close();
+ }
+
+ public void testTemporalType() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Flight airFrance = new Flight();
+ airFrance.setId( new Long( 747 ) );
+ airFrance.setName( "Paris-Amsterdam" );
+ airFrance.setDuration( new Long( 10 ) );
+ airFrance.setDepartureDate( new Date( 05, 06, 21, 10, 0, 0 ) );
+ airFrance.setAlternativeDepartureDate( new GregorianCalendar( 2006, 02, 03, 10, 00 )
);
+ airFrance.getAlternativeDepartureDate().setTimeZone( TimeZone.getTimeZone(
"GMT" ) );
+ airFrance.setBuyDate( new java.sql.Timestamp(122367443) );
+ airFrance.setFactor( 25 );
+ s.persist( airFrance );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from Flight f where f.departureDate =
:departureDate" );
+ q.setParameter( "departureDate", airFrance.getDepartureDate(), Hibernate.DATE
);
+ Flight copyAirFrance = (Flight) q.uniqueResult();
+ assertNotNull( copyAirFrance );
+ assertEquals(
+ new Date( 05, 06, 21 ),
+ copyAirFrance.getDepartureDate()
+ );
+ assertEquals( copyAirFrance.getBuyDate().getTime() / 1000 ,
airFrance.getBuyDate().getTime() / 1000 );
+
+ s.delete( copyAirFrance );
+ tx.commit();
+ s.close();
+ }
+
+ public void testBasic() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Flight airFrance = new Flight();
+ airFrance.setId( new Long( 747 ) );
+ airFrance.setName( "Paris-Amsterdam" );
+ airFrance.setDuration( null );
+ try {
+ s.persist( airFrance );
+ tx.commit();
+ fail( "Basic(optional=false) fails" );
+ }
+ catch (Exception e) {
+ //success
+ if ( tx != null ) tx.rollback();
+ }
+ finally {
+ s.close();
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Flight.class,
+ Company.class,
+ Sky.class
+ };
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+
+ Used to test the interaction of hbm files with a subclass
+ extends attribute and annotated classes.
+
+ See ConfigurationTest
+
+-->
+
+<hibernate-mapping package="org.hibernate.test.annotations">
+
+ <joined-subclass name="Ferry" table="FerryJoined"
extends="org.hibernate.test.annotations.Boat">
+ <key column="id"/>
+ <property name="sea"/>
+
+ </joined-subclass>
+
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ferry.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Ferry.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Ferry extends Boat {
+ private String sea;
+
+ public String getSea() {
+ return sea;
+ }
+
+ public void setSea(String string) {
+ sea = string;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Flight.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Flight.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Flight.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,149 @@
+//$Id: Flight.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+/**
+ * Flight
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+ Long id;
+ String name;
+ transient Long duration;
+ long durationInSec;
+ Integer version;
+ Company company;
+ String triggeredData;
+ long factor;
+ Date departureDate;
+ java.sql.Timestamp buyDate;
+ Calendar alternativeDepartureDate;
+
+ @Id
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ @Column(name = "flight_name", nullable = false, updatable = false, length =
50)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ @Basic(fetch = FetchType.LAZY, optional = false)
+ public Long getDuration() {
+ return duration;
+ }
+
+ @Basic
+ @Temporal(TemporalType.DATE)
+ public Date getDepartureDate() {
+ return departureDate;
+ }
+
+ public void setDepartureDate(Date departureDate) {
+ this.departureDate = departureDate;
+ }
+
+
+ public void setDuration(Long l) {
+ duration = l;
+ //durationInSec = duration / 1000;
+ }
+
+ @Transient
+ public long getDurationInSec() {
+ return durationInSec;
+ }
+
+ public void setDurationInSec(long l) {
+ durationInSec = l;
+ }
+
+ @Version
+ @Column(name = "OPTLOCK")
+ public Integer getVersion() {
+ return version;
+ }
+
+ public void setVersion(Integer i) {
+ version = i;
+ }
+
+ @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinColumn(name = "COMP_ID")
+ public Company getCompany() {
+ return company;
+ }
+
+ public void setCompany(Company company) {
+ this.company = company;
+ }
+
+ @Column(insertable = false, updatable = false)
+ public String getTriggeredData() {
+ return triggeredData;
+ }
+
+ public void setTriggeredData(String string) {
+ triggeredData = string;
+ }
+
+ public void getIsNotAGetter() {
+ //do nothing
+ }
+
+ public long getFactor(boolean x10) {
+ //this is not a getter should not be persisted
+ return factor * ( 1 + ( x10 == true ? 9 : 0 ) );
+ }
+
+ public void setFactor(long factor) {
+ this.factor = factor;
+ }
+
+ @Temporal(TemporalType.TIMESTAMP)
+ public Calendar getAlternativeDepartureDate() {
+ return alternativeDepartureDate;
+ }
+
+ public void setAlternativeDepartureDate(Calendar alternativeDepartureDate) {
+ this.alternativeDepartureDate = alternativeDepartureDate;
+ }
+
+ public java.sql.Timestamp getBuyDate() {
+ return buyDate;
+ }
+
+ public void setBuyDate(java.sql.Timestamp buyDate) {
+ this.buyDate = buyDate;
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/FlyingObject.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/FlyingObject.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/FlyingObject.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: FlyingObject.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public abstract class FlyingObject extends Thing implements Serializable {
+ private String serial;
+ private int altitude;
+ private int metricAltitude;
+ private String color = "white";
+
+
+ public int getAltitude() {
+ return altitude;
+ }
+
+ public void setAltitude(int i) {
+ altitude = i;
+ }
+
+ @Transient
+ public int getMetricAltitude() {
+ return metricAltitude;
+ }
+
+ public void setMetricAltitude(int i) {
+ metricAltitude = i;
+ }
+
+ @Column(name = "serialnbr")
+ public String getSerial() {
+ return serial;
+ }
+
+ public void setSerial(String serial) {
+ this.serial = serial;
+ }
+
+ @Column(nullable = false)
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/IncorrectEntity.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/IncorrectEntity.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/IncorrectEntity.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: IncorrectEntity.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class IncorrectEntity {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/JoinedSubclassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/JoinedSubclassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/JoinedSubclassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,110 @@
+//$Id: JoinedSubclassTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.inheritance.Carrot;
+import org.hibernate.test.annotations.inheritance.Tomato;
+import org.hibernate.test.annotations.inheritance.Vegetable;
+import org.hibernate.test.annotations.inheritance.VegetablePk;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinedSubclassTest extends TestCase {
+
+ public JoinedSubclassTest(String x) {
+ super( x );
+ }
+
+ public void testDefaultValues() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Ferry f = new Ferry();
+ f.setSize( 2 );
+ f.setSea( "Channel" );
+ s.persist( f );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ f = (Ferry) s.get( Ferry.class, f.getId() );
+ assertNotNull( f );
+ assertEquals( "Channel", f.getSea() );
+ assertEquals( 2, f.getSize() );
+ s.delete( f );
+ tx.commit();
+ s.close();
+ }
+
+ public void testDeclaredValues() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Country c = new Country();
+ c.setName( "France" );
+ AmericaCupClass f = new AmericaCupClass();
+ f.setSize( 2 );
+ f.setCountry( c );
+ s.persist( c );
+ s.persist( f );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ f = (AmericaCupClass) s.get( AmericaCupClass.class, f.getId() );
+ assertNotNull( f );
+ assertEquals( c, f.getCountry() );
+ assertEquals( 2, f.getSize() );
+ s.delete( f );
+ s.delete( f.getCountry() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositePk() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Carrot c = new Carrot();
+ VegetablePk pk = new VegetablePk();
+ pk.setFarmer( "Bill" );
+ pk.setHarvestDate( "2004-08-15" );
+ c.setId( pk );
+ c.setLength( 23 );
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Vegetable v = (Vegetable) s.createCriteria( Vegetable.class ).uniqueResult();
+ assertTrue( v instanceof Carrot );
+ Carrot result = (Carrot) v;
+ assertEquals( 23, result.getLength() );
+ tx.commit();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Boat.class,
+ Ferry.class,
+ AmericaCupClass.class,
+ Country.class,
+ Vegetable.class,
+ Carrot.class,
+ Tomato.class
+ };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Passport.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Passport.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Passport.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: Passport.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * International passport
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Passport implements Serializable {
+
+ private Long id;
+ private String number;
+ private Customer owner;
+
+ @Id
+ public Long getId() {
+ return id;
+ }
+
+ @Column(name = "passport_number")
+ public String getNumber() {
+ return number;
+ }
+
+ @OneToOne(mappedBy = "passport")
+ public Customer getOwner() {
+ return owner;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ public void setNumber(String string) {
+ number = string;
+ }
+
+ public void setOwner(Customer customer) {
+ owner = customer;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Plane.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Plane.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Plane.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+//$Id: Plane.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.NamedQuery;
+import javax.persistence.QueryHint;
+
+/**
+ * Plane class
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+@DiscriminatorColumn(name = "planetype", length = 100, discriminatorType =
DiscriminatorType.STRING)
+@DiscriminatorValue("Plane")
+@AttributeOverride(name = "altitude", column = @Column(name =
"fld_altitude"))
+@NamedQuery(name = "plane.byId", query = "from Plane where id =
:id",
+ hints = {@QueryHint(name = "org.hibernate.cacheable", value =
"true"),
+ @QueryHint(name = "org.hibernate.cacheRegion", value =
"testedCacheRegion"),
+ @QueryHint(name = "org.hibernate.timeout", value = "100"),
+ @QueryHint(name = "org.hibernate.fetchSize", value = "1"),
+ @QueryHint(name = "org.hibernate.flushMode", value = "Commit"),
+ @QueryHint(name = "org.hibernate.cacheMode", value = "NORMAL"),
+ @QueryHint(name = "org.hibernate.comment", value = "Plane by
id")})
+public class Plane extends FlyingObject {
+
+ private Long id;
+ private int nbrofSeats;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public int getNbrOfSeats() {
+ return nbrofSeats;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ public void setNbrOfSeats(int i) {
+ nbrofSeats = i;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Port.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Port.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Port.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: Port.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * Used to test that annotated classes can have one-to-many
+ * relationships with hbm loaded classes.
+ */
+@Entity()
+public class Port {
+ private Long id;
+ private Set<Boat> boats;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ @OneToMany
+ public Set<Boat> getBoats() {
+ return boats;
+ }
+
+ public void setBoats(Set<Boat> boats) {
+ this.boats = boats;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/RequiresDialect.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/RequiresDialect.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/RequiresDialect.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+// $Id: RequiresDialect.java 15025 2008-08-11 09:14:39Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.hibernate.dialect.Dialect;
+
+/**
+ * Annotations used to mark a test to be specific to a given dialect.
+ *
+ * @author Hardy Ferentschik
+ */
+(a)Target({ElementType.METHOD, ElementType.TYPE})
+(a)Retention(RetentionPolicy.RUNTIME)
+public @interface RequiresDialect {
+ Class<? extends Dialect>[] value();
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SafeMappingTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SafeMappingTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SafeMappingTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: SafeMappingTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SafeMappingTest extends junit.framework.TestCase {
+ public void testDeclarativeMix() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.addAnnotatedClass( IncorrectEntity.class );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ try {
+ SessionFactory sf = cfg.buildSessionFactory();
+ fail( "Entity wo id should fail" );
+ }
+ catch (AnnotationException e) {
+ //success
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SecuredBindingTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SecuredBindingTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/SecuredBindingTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: SecuredBindingTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.util.Properties;
+
+import junit.framework.TestCase;
+import org.hibernate.HibernateException;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SecuredBindingTest extends TestCase {
+
+ public SecuredBindingTest(String x) {
+ super( x );
+ }
+
+ public void testConfigurationMethods() throws Exception {
+ AnnotationConfiguration ac = new AnnotationConfiguration();
+ Properties p = new Properties();
+ p.put( Environment.DIALECT, "org.hibernate.dialect.HSQLDialect" );
+ p.put( "hibernate.connection.driver_class", "org.hsqldb.jdbcDrive"
);
+ p.put( "hibernate.connection.url", "jdbc:hsqldb:." );
+ p.put( "hibernate.connection.username", "sa" );
+ p.put( "hibernate.connection.password", "" );
+ p.put( "hibernate.show_sql", "true" );
+ ac.setProperties( p );
+ ac.addAnnotatedClass( Plane.class );
+ SessionFactory sf;
+ try {
+ sf = ac.buildSessionFactory();
+ fail( "Driver property overriding should work" );
+ sf.close();
+ }
+ catch (HibernateException he) {
+ //success
+ }
+
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Sky.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Sky.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Sky.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,28 @@
+//$Id: Sky.java 16418 2009-04-23 09:55:33Z jcosta(a)redhat.com $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_sky",
+ uniqueConstraints = {@UniqueConstraint(columnNames = {"month",
"day"})}
+)
+public class Sky implements Serializable {
+ @Id
+ protected Long id;
+ @Column(unique = true, columnDefinition = "varchar(250)", nullable = false)
+ protected String color;
+ @Column(nullable = false)
+ protected String day;
+ @Column(name = "MONTH", nullable = false)
+ protected String month;
+ static protected String area;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TestCase.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TestCase.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TestCase.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,292 @@
+//$Id: TestCase.java 17724 2009-10-13 15:47:59Z stliu $
+package org.hibernate.test.annotations;
+
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.jdbc.Work;
+import org.hibernate.tool.hbm2ddl.SchemaExport;
+
+/**
+ * A base class for all tests.
+ *
+ * @author Emmnauel Bernand
+ * @author Hardy Ferentschik
+ */
+public abstract class TestCase extends junit.framework.TestCase {
+
+ public static final Logger log = LoggerFactory.getLogger( TestCase.class );
+
+ private static SessionFactory sessions;
+ private static AnnotationConfiguration cfg;
+ private static Class<?> lastTestClass;
+ private Session session;
+
+ /**
+ * The test method.
+ */
+ private Method runMethod = null;
+
+ /**
+ * Flag indicating whether the test should be run or skipped.
+ */
+ private boolean runTest = true;
+
+ /**
+ * List of required dialect for the current {@code runMethod}. If the list is empty any
dialect is allowed.
+ * Otherwise the current dialect or a superclass of the current dialect must be in the
list.
+ */
+ private final Set<Class<? extends Dialect>> requiredDialectList = new
HashSet<Class<? extends Dialect>>();
+
+ public TestCase() {
+ super();
+ }
+
+ public TestCase(String x) {
+ super( x );
+ }
+
+ protected void buildSessionFactory(Class<?>[] classes, String[] packages, String[]
xmlFiles) throws Exception {
+
+ if ( getSessions() != null ) {
+ getSessions().close();
+ }
+ try {
+ setCfg( new AnnotationConfiguration() );
+ configure( cfg );
+ if ( recreateSchema() ) {
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ }
+ for ( String aPackage : packages ) {
+ getCfg().addPackage( aPackage );
+ }
+ for ( Class<?> aClass : classes ) {
+ getCfg().addAnnotatedClass( aClass );
+ }
+ for ( String xmlFile : xmlFiles ) {
+ InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
xmlFile );
+ getCfg().addInputStream( is );
+ }
+ setSessions( getCfg().buildSessionFactory( /* new TestInterceptor() */ ) );
+ }
+ catch ( Exception e ) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ protected void setUp() throws Exception {
+ runMethod = findTestMethod();
+ setRunTestFlag( runMethod );
+ if ( runTest ) {
+ if ( getSessions() == null || lastTestClass != getClass() ) {
+ buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+ lastTestClass = getClass();
+ }
+ else {
+ runSchemaGeneration();
+ }
+ }
+ }
+
+ protected void runTest() throws Throwable {
+ try {
+ if ( runTest ) {
+ runTestMethod( runMethod );
+ handleUnclosedSession();
+ }
+ }
+ catch ( Throwable e ) {
+ closeSession( e );
+ }
+ }
+
+ private void setRunTestFlag(Method runMethod) {
+ updateRequiredDialectList( runMethod );
+
+ if ( runForCurrentDialect() ) {
+ runTest = true;
+ }
+ else {
+ log.warn(
+ "Skipping test {}, because test does not apply for dialect {}",
runMethod.getName(), Dialect
+ .getDialect().getClass()
+ );
+ runTest = false;
+ }
+ }
+
+ private void updateRequiredDialectList(Method runMethod) {
+ requiredDialectList.clear();
+
+ RequiresDialect requiresDialectMethodAnn = runMethod.getAnnotation(
RequiresDialect.class );
+ if ( requiresDialectMethodAnn != null ) {
+ Class<? extends Dialect>[] requiredDialects = requiresDialectMethodAnn.value();
+ requiredDialectList.addAll( Arrays.asList( requiredDialects ) );
+ }
+
+ RequiresDialect requiresDialectClassAnn = getClass().getAnnotation(
RequiresDialect.class );
+ if ( requiresDialectClassAnn != null ) {
+ Class<? extends Dialect>[] requiredDialects = requiresDialectClassAnn.value();
+ requiredDialectList.addAll( Arrays.asList( requiredDialects ) );
+ }
+ }
+
+ protected boolean runForCurrentDialect() {
+ if ( requiredDialectList.isEmpty() ) {
+ return true;
+ }
+ else {
+ // check whether the current dialect is assignableFrom from any of the specified
required dialects.
+ for ( Class<? extends Dialect> dialect : requiredDialectList ) {
+ if ( dialect.isAssignableFrom( Dialect.getDialect().getClass() ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ private void runTestMethod(Method runMethod) throws Throwable {
+ try {
+ runMethod.invoke( this, new Class[0] );
+ }
+ catch ( InvocationTargetException e ) {
+ e.fillInStackTrace();
+ throw e.getTargetException();
+ }
+ catch ( IllegalAccessException e ) {
+ e.fillInStackTrace();
+ throw e;
+ }
+ }
+
+ private Method findTestMethod() {
+ String fName = getName();
+ assertNotNull( fName );
+ Method runMethod = null;
+ try {
+ runMethod = getClass().getMethod( fName, null );
+ }
+ catch ( NoSuchMethodException e ) {
+ fail( "Method \"" + fName + "\" not found" );
+ }
+ if ( !Modifier.isPublic( runMethod.getModifiers() ) ) {
+ fail( "Method \"" + fName + "\" should be public" );
+ }
+ return runMethod;
+ }
+
+ private void handleUnclosedSession() {
+ if ( session != null && session.isOpen() ) {
+ if ( session.isConnected() ) {
+ session.doWork( new RollbackWork() );
+ }
+ session.close();
+ session = null;
+ fail( "unclosed session" );
+ }
+ else {
+ session = null;
+ }
+ }
+
+ private void closeSession(Throwable e) throws Throwable {
+ try {
+ if ( session != null && session.isOpen() ) {
+ if ( session.isConnected() ) {
+ session.doWork( new RollbackWork() );
+ }
+ session.close();
+ }
+ }
+ catch ( Exception ignore ) {
+ }
+ try {
+ if ( sessions != null ) {
+ sessions.close();
+ sessions = null;
+ }
+ }
+ catch ( Exception ignore ) {
+ }
+ throw e;
+ }
+
+ public Session openSession() throws HibernateException {
+ session = getSessions().openSession();
+ return session;
+ }
+
+ public Session openSession(Interceptor interceptor) throws HibernateException {
+ session = getSessions().openSession( interceptor );
+ return session;
+ }
+
+ protected abstract Class<?>[] getMappings();
+
+ protected String[] getAnnotatedPackages() {
+ return new String[] { };
+ }
+
+ protected String[] getXmlFiles() {
+ return new String[] { };
+ }
+
+ private void setSessions(SessionFactory sessions) {
+ TestCase.sessions = sessions;
+ }
+
+ protected SessionFactory getSessions() {
+ return sessions;
+ }
+
+ protected Dialect getDialect() {
+ return Dialect.getDialect();
+ }
+
+ protected static void setCfg(AnnotationConfiguration cfg) {
+ TestCase.cfg = cfg;
+ }
+
+ protected static AnnotationConfiguration getCfg() {
+ return cfg;
+ }
+
+ protected void configure(Configuration cfg) {
+ }
+
+ protected boolean recreateSchema() {
+ return true;
+ }
+
+ protected void runSchemaGeneration() {
+ SchemaExport export = new SchemaExport( cfg );
+ export.create( true, true );
+ }
+
+ public class RollbackWork implements Work {
+
+ public void execute(Connection connection) throws SQLException {
+ connection.rollback();
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Thing.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Thing.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Thing.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: Thing.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Thing {
+ private boolean isAlive;
+
+ public boolean isAlive() {
+ return isAlive;
+ }
+
+ public void setAlive(boolean alive) {
+ isAlive = alive;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ticket.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ticket.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/Ticket.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+//$Id: Ticket.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Flight ticket
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Ticket implements Serializable {
+ Long id;
+ String number;
+
+ public Ticket() {
+ }
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ @Column(name = "ticket_number")
+ public String getNumber() {
+ return number;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ public void setNumber(String string) {
+ number = string;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Ticket ) ) return false;
+
+ final Ticket ticket = (Ticket) o;
+
+ if ( !number.equals( ticket.number ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return number.hashCode();
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TicketComparator.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TicketComparator.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/TicketComparator.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: TicketComparator.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations;
+
+import java.util.Comparator;
+
+/**
+ * Ticket comparator ordering longest first
+ *
+ * @author Emmanuel Bernard
+ */
+public class TicketComparator implements Comparator<Ticket> {
+
+ public int compare(Ticket ticket, Ticket ticket1) {
+ if ( ticket == null || ticket1 == null ) {
+ throw new IllegalStateException( "Ticket comparison only available through non
null tickets" );
+ }
+ return ticket1.getNumber().length() - ticket.getNumber().length();
+
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/AccessTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/AccessTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/AccessTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,128 @@
+//$Id: AccessTest.java 15025 2008-08-11 09:14:39Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AccessTest extends TestCase {
+
+ public void testSuperclassOverriding() throws Exception {
+ Furniture fur = new Furniture();
+ fur.setColor( "Black" );
+ fur.setName( "Beech" );
+ fur.isAlive = true;
+ Session s = openSession();
+ s.persist( fur );
+ Transaction tx = s.beginTransaction();
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ fur = (Furniture) s.get( Furniture.class, fur.getId() );
+ assertFalse( fur.isAlive );
+ assertNotNull( fur.getColor() );
+ s.delete( fur );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSuperclassNonOverriding() throws Exception {
+ Furniture fur = new Furniture();
+ fur.setGod( "Buddha" );
+ Session s = openSession();
+ s.persist( fur );
+ Transaction tx = s.beginTransaction();
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ fur = (Furniture) s.get( Furniture.class, fur.getId() );
+ assertNotNull( fur.getGod() );
+ s.delete( fur );
+ tx.commit();
+ s.close();
+ }
+
+ public void testPropertyOverriding() throws Exception {
+ Furniture fur = new Furniture();
+ fur.weight = 3;
+ Session s = openSession();
+ s.persist( fur );
+ Transaction tx = s.beginTransaction();
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ fur = (Furniture) s.get( Furniture.class, fur.getId() );
+ assertEquals( 5, fur.weight );
+ s.delete( fur );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testNonOverridenSubclass() throws Exception {
+ Chair chair = new Chair();
+ chair.setPillow( "Blue" );
+ Session s = openSession();
+ s.persist( chair );
+ Transaction tx = s.beginTransaction();
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ chair = (Chair) s.get( Chair.class, chair.getId() );
+ assertNull( chair.getPillow() );
+ s.delete( chair );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testOverridenSubclass() throws Exception {
+ BigBed bed = new BigBed();
+ bed.size = 5;
+ bed.setQuality( "good" );
+ Session s = openSession();
+ s.persist( bed );
+ Transaction tx = s.beginTransaction();
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ bed = (BigBed) s.get( BigBed.class, bed.getId() );
+ assertEquals( 5, bed.size );
+ assertNull( bed.getQuality() );
+ s.delete( bed );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testFieldsOverriding() throws Exception {
+ Gardenshed gs = new Gardenshed();
+ gs.floors = 4;
+ Session s = openSession();
+ s.persist( gs );
+ Transaction tx = s.beginTransaction();
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ gs = (Gardenshed) s.get( Gardenshed.class, gs.getId() );
+ assertEquals( 4, gs.floors );
+ assertEquals( 6, gs.getFloors() );
+ s.delete( gs );
+ tx.commit();
+ s.close();
+
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Bed.class,
+ Chair.class,
+ Furniture.class,
+ BigBed.class,
+ Gardenshed.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Bed.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Bed.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Bed.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: Bed.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AccessType("property")
+public class Bed extends Furniture {
+ String quality;
+
+ @Transient
+ public String getQuality() {
+ return quality;
+ }
+
+ public void setQuality(String quality) {
+ this.quality = quality;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/BigBed.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/BigBed.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/BigBed.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+//$Id: BigBed.java 15073 2008-08-14 17:32:44Z epbernard $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class BigBed extends Bed {
+ @Column(name="bed_size")
+ public int size;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Chair.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Chair.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Chair.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,23 @@
+//$Id: Chair.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Chair extends Furniture {
+
+ @Transient
+ private String pillow;
+
+ public String getPillow() {
+ return pillow;
+ }
+
+ public void setPillow(String pillow) {
+ this.pillow = pillow;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Furniture.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Furniture.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Furniture.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id: Furniture.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AccessType("field")
+public class Furniture extends Woody {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ private String brand;
+
+ @Transient
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+
+ @AccessType("property")
+ public long weight;
+
+ public long getWeight() {
+ return weight + 1;
+ }
+
+ public void setWeight(long weight) {
+ this.weight = weight + 1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Gardenshed.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Gardenshed.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Gardenshed.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,55 @@
+//$Id: Gardenshed.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * This is the opposite of the Furniture test, as this tries to override the class
AccessType("property") with
+ * the property AccessType("field").
+ *
+ * @author Dennis Fleurbaaij
+ * @since 2007-05-31
+ */
+@Entity
+@AccessType( "property" )
+public class Gardenshed
+ extends
+ Woody {
+ private Integer id;
+ private String brand;
+ public long floors;
+
+ @Transient
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ // These 2 functions should not return in Hibernate, but the value should come from the
field "floors"
+ @AccessType( "field" )
+ public long getFloors() {
+ return this.floors + 2;
+ }
+
+ public void setFloors(long floors) {
+ this.floors = floors + 2;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Thingy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Thingy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Thingy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Thingy.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Thingy {
+ private String god;
+
+ @Transient
+ public String getGod() {
+ return god;
+ }
+
+ public void setGod(String god) {
+ this.god = god;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Woody.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Woody.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/access/Woody.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Woody.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.MappedSuperclass;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+@AccessType("property")
+public class Woody extends Thingy {
+ private String color;
+ private String name;
+ public boolean isAlive; //shouldn't be persistent
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/AnyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/AnyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/AnyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,158 @@
+package org.hibernate.test.annotations.any;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+public class AnyTest extends TestCase {
+
+ public void testDefaultAnyAssociation() {
+ Session s = openSession();
+ Transaction t = s.beginTransaction();
+
+ PropertySet set1 = new PropertySet( "string" );
+ Property property = new StringProperty( "name", "Alex" );
+ set1.setSomeProperty( property );
+ set1.addGeneratedProperty( property );
+ s.save( set1 );
+
+ PropertySet set2 = new PropertySet( "integer" );
+ property = new IntegerProperty( "age", 33 );
+ set2.setSomeProperty( property );
+ set2.addGeneratedProperty( property );
+ s.save( set2 );
+
+ s.flush();
+ s.clear();
+
+ Query q = s
+ .createQuery( "select s from PropertySet s where name = :name" );
+ q.setString( "name", "string" );
+ PropertySet result = (PropertySet) q.uniqueResult();
+
+ assertNotNull( result );
+ assertNotNull( result.getSomeProperty() );
+ assertTrue( result.getSomeProperty() instanceof StringProperty );
+ assertEquals( "Alex", result.getSomeProperty().asString() );
+ assertNotNull( result.getGeneralProperties() );
+ assertEquals( 1, result.getGeneralProperties().size() );
+ assertEquals( "Alex", result.getGeneralProperties().get( 0 ).asString() );
+
+ q.setString( "name", "integer" );
+ result = (PropertySet) q.uniqueResult();
+ assertNotNull( result );
+ assertNotNull( result.getSomeProperty() );
+ assertTrue( result.getSomeProperty() instanceof IntegerProperty );
+ assertEquals( "33", result.getSomeProperty().asString() );
+ assertNotNull( result.getGeneralProperties() );
+ assertEquals( 1, result.getGeneralProperties().size() );
+ assertEquals( "33", result.getGeneralProperties().get( 0 ).asString() );
+
+ t.rollback();
+ s.close();
+ }
+
+ public void testManyToAnyWithMap() throws Exception {
+
+ Session s = openSession();
+ Transaction t = s.beginTransaction();
+
+ PropertyMap map = new PropertyMap( "sample" );
+ map.getProperties().put( "name", new StringProperty( "name",
"Alex" ) );
+ map.getProperties().put( "age", new IntegerProperty( "age", 33 )
);
+
+ s.save( map );
+
+ s.flush();
+ s.clear();
+
+ Query q = s
+ .createQuery( "SELECT map FROM PropertyMap map WHERE map.name = :name" );
+ q.setString( "name", "sample" );
+ PropertyMap actualMap = (PropertyMap) q.uniqueResult();
+
+ assertNotNull( actualMap );
+ assertNotNull( actualMap.getProperties() );
+
+ Property property = actualMap.getProperties().get( "name" );
+ assertNotNull( property );
+ assertTrue( property instanceof StringProperty );
+ assertEquals( "Alex", property.asString() );
+
+ property = actualMap.getProperties().get( "age" );
+ assertNotNull( property );
+ assertTrue( property instanceof IntegerProperty );
+ assertEquals( "33", property.asString() );
+
+ t.rollback();
+ s.close();
+
+ }
+
+ public void testMetaDataUseWithManyToAny() throws Exception {
+ Session s = openSession();
+ Transaction t = s.beginTransaction();
+
+ PropertyList list = new PropertyList( "sample" );
+ StringProperty stringProperty = new StringProperty( "name", "Alex"
);
+ IntegerProperty integerProperty = new IntegerProperty( "age", 33 );
+ LongProperty longProperty = new LongProperty( "distance", 121L );
+ CharProperty charProp = new CharProperty( "Est", 'E' );
+
+ list.setSomeProperty( longProperty );
+
+ list.addGeneratedProperty( stringProperty );
+ list.addGeneratedProperty( integerProperty );
+ list.addGeneratedProperty( longProperty );
+ list.addGeneratedProperty( charProp );
+
+ s.save( list );
+
+ s.flush();
+ s.clear();
+
+ Query q = s
+ .createQuery( "SELECT list FROM PropertyList list WHERE list.name = :name"
);
+ q.setString( "name", "sample" );
+ PropertyList<Property> actualList = (PropertyList<Property>) q
+ .uniqueResult();
+
+ assertNotNull( actualList );
+ assertNotNull( actualList.getGeneralProperties() );
+ assertEquals( 4, actualList.getGeneralProperties().size() );
+
+ Property property = actualList.getSomeProperty();
+ assertNotNull( property );
+ assertTrue( property instanceof LongProperty );
+ assertEquals( "121", property.asString() );
+
+ assertEquals( "Alex", actualList.getGeneralProperties().get( 0 )
+ .asString() );
+ assertEquals( "33", actualList.getGeneralProperties().get( 1 ).asString() );
+ assertEquals( "121", actualList.getGeneralProperties().get( 2 ).asString()
);
+ assertEquals( "E", actualList.getGeneralProperties().get( 3 ).asString() );
+
+ t.rollback();
+ s.close();
+ }
+
+ @Override
+ protected Class[] getMappings() {
+ return new Class[] {
+ StringProperty.class,
+ IntegerProperty.class,
+ LongProperty.class,
+ PropertySet.class,
+ PropertyMap.class,
+ PropertyList.class,
+ CharProperty.class
+ };
+ }
+
+ protected String[] getAnnotatedPackages() {
+ return new String[] {
+ "org.hibernate.test.annotations.any"
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/CharProperty.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/CharProperty.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/CharProperty.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+package org.hibernate.test.annotations.any;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table( name = "char_property" )
+public class CharProperty implements Property {
+ private Integer id;
+
+ private String name;
+
+ private Character value;
+
+ public CharProperty() {
+ super();
+ }
+
+ public CharProperty(String name, Character value) {
+ super();
+ this.name = name;
+ this.value = value;
+ }
+
+ public String asString() {
+ return Character.toString( value );
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Character getValue() {
+ return value;
+ }
+
+ public void setValue(Character value) {
+ this.value = value;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/IntegerProperty.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/IntegerProperty.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/IntegerProperty.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+package org.hibernate.test.annotations.any;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="int_property")
+public class IntegerProperty implements Property {
+ private Integer id;
+ private String name;
+ private Integer value;
+
+ public IntegerProperty() {
+ super();
+ }
+
+ public IntegerProperty(String name, Integer value) {
+ super();
+ this.name = name;
+ this.value = value;
+ }
+
+ public String asString() {
+ return Integer.toString(value);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getValue() {
+ return value;
+ }
+
+ public void setValue(Integer value) {
+ this.value = value;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/LongProperty.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/LongProperty.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/LongProperty.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+package org.hibernate.test.annotations.any;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "long_property")
+public class LongProperty implements Property {
+ private Integer id;
+
+ private String name;
+
+ private Long value;
+
+ public LongProperty() {
+ super();
+ }
+
+ public LongProperty(String name, Long value) {
+ super();
+ this.name = name;
+ this.value = value;
+ }
+
+ public String asString() {
+ return Long.toString(value);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Long getValue() {
+ return value;
+ }
+
+ public void setValue(Long value) {
+ this.value = value;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/Property.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/Property.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/Property.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,7 @@
+package org.hibernate.test.annotations.any;
+
+public interface Property {
+
+ public String getName();
+ public String asString();
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyList.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyList.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyList.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,85 @@
+package org.hibernate.test.annotations.any;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.JoinTable;
+import javax.persistence.Column;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.ManyToAny;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.IndexColumn;
+import org.hibernate.annotations.Any;
+import org.hibernate.annotations.CascadeType;
+
+@Entity
+@Table( name = "property_list" )
+public class PropertyList<T extends Property> {
+ private Integer id;
+
+ private String name;
+
+ private T someProperty;
+
+ private List<T> generalProperties = new ArrayList<T>();
+
+ public PropertyList() {
+ super();
+ }
+
+ public PropertyList(String name) {
+ this.name = name;
+ }
+
+ @ManyToAny( metaDef = "Property", metaColumn = @Column(name =
"property_type") )
+ @Cascade( { org.hibernate.annotations.CascadeType.ALL })
+ @JoinTable(name = "list_properties",
+ joinColumns = @JoinColumn(name = "obj_id"),
+ inverseJoinColumns = @JoinColumn(name = "property_id")
+ )
+ @IndexColumn(name = "prop_index")
+ public List<T> getGeneralProperties() {
+ return generalProperties;
+ }
+
+ public void setGeneralProperties(List<T> generalProperties) {
+ this.generalProperties = generalProperties;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Any( metaDef = "Property", metaColumn = @Column(name =
"property_type") )
+ @Cascade( CascadeType.ALL )
+ @JoinColumn(name = "property_id")
+ public T getSomeProperty() {
+ return someProperty;
+ }
+
+ public void setSomeProperty(T someProperty) {
+ this.someProperty = someProperty;
+ }
+
+ public void addGeneratedProperty(T property) {
+ this.generalProperties.add( property );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,74 @@
+package org.hibernate.test.annotations.any;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.AnyMetaDef;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.ManyToAny;
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.MetaValue;
+
+@Entity
+@Table( name = "property_map" )
+public class PropertyMap {
+ private Integer id;
+ private String name;
+
+ private Map<String, Property> properties = new HashMap<String, Property>();
+
+ public PropertyMap(String name) {
+ this.name = name;
+ }
+
+ public PropertyMap() {
+ super();
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToAny( metaColumn = @Column( name = "property_type" ) )
+ @AnyMetaDef(
+ idType = "integer", metaType = "string",
+ metaValues = {
+ @MetaValue( value = "S", targetEntity = StringProperty.class ),
+ @MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
+ @Cascade( org.hibernate.annotations.CascadeType.ALL )
+ @JoinTable(
+ name = "map_properties",
+ joinColumns = @JoinColumn( name = "map_id" ),
+ inverseJoinColumns = @JoinColumn( name = "property_id" ) )
+ @MapKey( columns = { @Column( name = "map_key" ) } )
+ public Map<String, Property> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, Property> properties) {
+ this.properties = properties;
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertySet.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertySet.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/PropertySet.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,90 @@
+package org.hibernate.test.annotations.any;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Any;
+import org.hibernate.annotations.AnyMetaDef;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.ManyToAny;
+import org.hibernate.annotations.MetaValue;
+
+@Entity
+@Table( name = "property_set" )
+public class PropertySet {
+ private Integer id;
+ private String name;
+ private Property someProperty;
+
+ private List<Property> generalProperties = new ArrayList<Property>();
+
+ public PropertySet() {
+ super();
+ }
+
+ public PropertySet(String name) {
+ this.name = name;
+ }
+
+ @ManyToAny(
+ metaColumn = @Column( name = "property_type" ) )
+ @AnyMetaDef( idType = "integer", metaType = "string",
+ metaValues = {
+ @MetaValue( value = "S", targetEntity = StringProperty.class ),
+ @MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
+ @Cascade( { org.hibernate.annotations.CascadeType.ALL } )
+ @JoinTable( name = "obj_properties", joinColumns = @JoinColumn( name =
"obj_id" ),
+ inverseJoinColumns = @JoinColumn( name = "property_id" ) )
+ public List<Property> getGeneralProperties() {
+ return generalProperties;
+ }
+
+ public void setGeneralProperties(List<Property> generalProperties) {
+ this.generalProperties = generalProperties;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Any( metaColumn = @Column( name = "property_type" ) )
+ @Cascade( value = { CascadeType.ALL } )
+ @AnyMetaDef( idType = "integer", metaType = "string", metaValues =
{
+ @MetaValue( value = "S", targetEntity = StringProperty.class ),
+ @MetaValue( value = "I", targetEntity = IntegerProperty.class )
+ } )
+ @JoinColumn( name = "property_id" )
+ public Property getSomeProperty() {
+ return someProperty;
+ }
+
+ public void setSomeProperty(Property someProperty) {
+ this.someProperty = someProperty;
+ }
+
+ public void addGeneratedProperty(Property property) {
+ this.generalProperties.add( property );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/StringProperty.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/StringProperty.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/StringProperty.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+package org.hibernate.test.annotations.any;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="string_property")
+public class StringProperty implements Property {
+ private Integer id;
+ private String name;
+ private String value;
+
+ public StringProperty() {
+ super();
+ }
+
+ public StringProperty(String name, String value) {
+ super();
+ this.name = name;
+ this.value = value;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String asString() {
+ return value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/package-info.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/package-info.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/any/package-info.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,16 @@
+//$Id:
+@AnyMetaDefs(
+ @AnyMetaDef( name= "Property", metaType = "string", idType =
"integer",
+ metaValues = {
+ @MetaValue(value = "C", targetEntity = CharProperty.class),
+ @MetaValue(value = "I", targetEntity = IntegerProperty.class),
+ @MetaValue(value = "S", targetEntity = StringProperty.class),
+ @MetaValue(value = "L", targetEntity = LongProperty.class)
+ })
+)
+
+package org.hibernate.test.annotations.any;
+
+import org.hibernate.annotations.AnyMetaDefs;
+import org.hibernate.annotations.AnyMetaDef;
+import org.hibernate.annotations.MetaValue;
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/ArrayTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: ArrayTest.java 14956 2008-07-18 12:08:43Z hardy.ferentschik $
+package org.hibernate.test.annotations.array;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.array.Contest.Month;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ArrayTest extends TestCase {
+
+ public void testOneToMany() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Competitor c1 = new Competitor();
+ c1.setName( "Renault" );
+ Competitor c2 = new Competitor();
+ c2.setName( "Ferrari" );
+ Contest contest = new Contest();
+ contest.setResults( new Competitor[]{c1, c2} );
+ contest.setHeldIn(new Month[]{Month.January, Month.December});
+ s.persist( contest );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ contest = (Contest) s.get( Contest.class, contest.getId() );
+ assertNotNull( contest );
+ assertNotNull( contest.getResults() );
+ assertEquals( 2, contest.getResults().length );
+ assertEquals( c2.getName(), contest.getResults()[1].getName() );
+ assertEquals( 2, contest.getHeldIn().length );
+ assertEquals( Month.January, contest.getHeldIn()[0] );
+ tx.commit();
+ s.close();
+ }
+
+ public ArrayTest(String x) {
+ super( x );
+ }
+
+ @SuppressWarnings("unchecked")
+ protected Class[] getMappings() {
+ return new Class[]{
+ Competitor.class,
+ Contest.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Competitor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Competitor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Competitor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Competitor.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.array;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Competitor {
+ private int id;
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Contest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Contest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/array/Contest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+//$Id: Contest.java 14956 2008-07-18 12:08:43Z hardy.ferentschik $
+package org.hibernate.test.annotations.array;
+
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Contest {
+ private int id;
+ private Competitor[] results;
+ private Month[] heldIn;
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @OneToMany(cascade = CascadeType.ALL)
+ @IndexColumn(name = "pos")
+ public Competitor[] getResults() {
+ return results;
+ }
+
+ public void setResults(Competitor[] results) {
+ this.results = results;
+ }
+
+ @CollectionOfElements
+ @IndexColumn(name = "pos", base=1)
+ public Month[] getHeldIn() {
+ return heldIn;
+ }
+
+ public void setHeldIn(Month[] heldIn) {
+ this.heldIn = heldIn;
+ }
+
+ public enum Month {
+ January, February, March, April, May, June, July, August, September, October, November,
December;
+ };
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/BackquoteTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/BackquoteTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/BackquoteTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: BackquoteTest.java 14747 2008-06-06 08:16:25Z hardy.ferentschik $
+package org.hibernate.test.annotations.backquotes;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import junit.framework.TestCase;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Testcase for ANN-718 - @JoinTable / @JoinColumn fail when using backquotes in PK field
name.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+public class BackquoteTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(BackquoteTest.class);
+
+ public void testBackquotes() {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(Bug.class);
+ config.addAnnotatedClass(Category.class);
+ config.buildSessionFactory();
+ }
+ catch( Exception e ) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Bug.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Bug.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Bug.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: Bug.java 14747 2008-06-06 08:16:25Z hardy.ferentschik $
+package org.hibernate.test.annotations.backquotes;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.Index;
+
+@Entity
+public class Bug
+{
+ @Id
+ @Column(name="`bug_id`")
+ private int id;
+
+ @Column(name="`title`")
+ @Index(name="`titleindex`")
+ private String title;
+
+ @ManyToMany
+ @JoinTable(name="`bug_category`")
+ private List<Category> categories;
+
+ public List<Category> getCategories() {
+ return categories;
+ }
+
+ public void setCategories(List<Category> categories) {
+ this.categories = categories;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Category.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Category.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/backquotes/Category.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Category.java 14735 2008-06-04 14:05:50Z hardy.ferentschik $
+package org.hibernate.test.annotations.backquotes;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class Category
+{
+ @Id
+ @Column(name="`cat_id`")
+ private int id;
+
+ @Column(name="`title`")
+ private String title;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.bytecode">
+ <class name="Hammer">
+ <id name="id" type="java.lang.Long">
+ <generator class="increment"/>
+ </id>
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Hammer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: Hammer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.bytecode;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Hammer implements Tool {
+ private Long id;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Integer usage() {
+ return 0;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: ProxyBreakingTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.bytecode;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.Hibernate;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ProxyBreakingTest extends TestCase {
+
+ static {
+ System.setProperty( "hibernate.bytecode.provider", "javassist" );
+ }
+
+ public void testProxiedBridgeMethod() throws Exception {
+ //bridge methods should not be proxied
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Hammer h = new Hammer();
+ s.save(h);
+ s.flush();
+ s.clear();
+ assertNotNull( "The proxy creation failure is breaking things", h.getId() );
+ h = (Hammer) s.load( Hammer.class, h.getId() );
+ assertFalse( Hibernate.isInitialized( h ) );
+ tx.rollback();
+ s.close();
+ }
+
+ public ProxyBreakingTest(String name) {
+ super( name );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[0];
+ }
+
+ protected String[] getXmlFiles() {
+ return new String[] {
+ "org/hibernate/test/annotations/bytecode/Hammer.hbm.xml"
+ };
+ }
+
+ @Override
+ protected void configure(Configuration cfg) {
+ super.configure( cfg.setProperty( "hibernate.bytecode.provider",
"javassist" ) );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Tool.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Tool.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/bytecode/Tool.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$Id: Tool.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.bytecode;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Tool {
+ public Long getId();
+
+ public void setId(Long id);
+
+ public Number usage();
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/CascadeTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/CascadeTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/CascadeTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,115 @@
+//$Id: CascadeTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cascade;
+
+import java.util.ArrayList;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Check some of the individual cascade styles
+ *
+ * @author Emmanuel Bernard
+ */
+//FIXME do somthing for refresh
+public class CascadeTest extends TestCase {
+ public void testPersist() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ Tooth tooth = new Tooth();
+ Tooth leftTooth = new Tooth();
+ tooth.leftNeighbour = leftTooth;
+ s.persist( tooth );
+ tx = s.beginTransaction();
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ leftTooth = (Tooth) s.get( Tooth.class, leftTooth.id );
+ assertNotNull( leftTooth );
+ tx.commit();
+ s.close();
+ }
+
+ public void testMerge() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ Tooth tooth = new Tooth();
+ Tooth rightTooth = new Tooth();
+ tooth.type = "canine";
+ tooth.rightNeighbour = rightTooth;
+ rightTooth.type = "incisive";
+ s.persist( rightTooth );
+ s.persist( tooth );
+ tx = s.beginTransaction();
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ tooth = (Tooth) s.get( Tooth.class, tooth.id );
+ assertEquals( "incisive", tooth.rightNeighbour.type );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ tooth.rightNeighbour.type = "premolars";
+ s.merge( tooth );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ rightTooth = (Tooth) s.get( Tooth.class, rightTooth.id );
+ assertEquals( "premolars", rightTooth.type );
+ tx.commit();
+ s.close();
+ }
+
+ public void testRemove() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Tooth tooth = new Tooth();
+ Mouth mouth = new Mouth();
+ s.persist( mouth );
+ s.persist( tooth );
+ tooth.mouth = mouth;
+ mouth.teeth = new ArrayList<Tooth>();
+ mouth.teeth.add( tooth );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ tooth = (Tooth) s.get( Tooth.class, tooth.id );
+ assertNotNull( tooth );
+ s.delete( tooth.mouth );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ tooth = (Tooth) s.get( Tooth.class, tooth.id );
+ assertNull( tooth );
+ tx.commit();
+ s.close();
+ }
+
+ public CascadeTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Mouth.class,
+ Tooth.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Mouth.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Mouth.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Mouth.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: Mouth.java 15056 2008-08-13 18:15:05Z epbernard $
+package org.hibernate.test.annotations.cascade;
+
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Mouth {
+ @Id
+ @GeneratedValue
+ public Integer id;
+ @Column(name="mouth_size")
+ public int size;
+ @OneToMany(mappedBy = "mouth", cascade = CascadeType.REMOVE)
+ public Collection<Tooth> teeth;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Tooth.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Tooth.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cascade/Tooth.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: Tooth.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Tooth {
+ @Id
+ @GeneratedValue
+ public Integer id;
+ public String type;
+ @ManyToOne(cascade = CascadeType.PERSIST)
+ public Tooth leftNeighbour;
+ @ManyToOne(cascade = CascadeType.MERGE)
+ public Tooth rightNeighbour;
+ @ManyToOne
+ public Mouth mouth;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/A.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/A.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/A.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: A.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+
+/**
+ * @author Artur Legan
+ *
+ */
+@Entity
+public class A implements Serializable{
+
+ @EmbeddedId
+ private AId aId;
+
+ public AId getAId() {
+ return aId;
+ }
+
+ public void setAId(AId aId) {
+ this.aId = aId;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/AId.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/AId.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/AId.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: AId.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+
+/**
+ * @author Artur Legan
+ */
+@Embeddable
+public class AId implements Serializable {
+
+ @OneToOne
+ @JoinColumn( name = "bid" )
+ private B b;
+
+ @OneToOne
+ @JoinColumn( name = "cid" )
+ private C c;
+
+
+ public B getB() {
+ return b;
+ }
+
+ public void setB(B b) {
+ this.b = b;
+ }
+
+ public C getC() {
+ return c;
+ }
+
+ public void setC(C c) {
+ this.c = c;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/B.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/B.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/B.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: B.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+/**
+ * @author Artur Legan
+ */
+@Entity
+public class B {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/C.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/C.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/C.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: C.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+/**
+ * @author Artur Legan
+ */
+@Entity
+public class C {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Channel.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Channel.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Channel.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,16 @@
+//$Id: Channel.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Channel {
+ @Id
+ @GeneratedValue
+ public Integer id;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Child.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Child.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Child.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Child.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * Entity having a many to one in its pk
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+public class Child {
+ @EmbeddedId
+ @AttributeOverride(name = "nthChild", column = @Column(name =
"nth"))
+ public ChildPk id;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ChildPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ChildPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ChildPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+//$Id: ChildPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * Child Pk with many to one inside
+ *
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class ChildPk implements Serializable {
+ public int nthChild;
+ @ManyToOne()
+ @JoinColumns({
+ @JoinColumn(name = "parentLastName", referencedColumnName =
"p_lname"),
+ @JoinColumn(name = "parentFirstName", referencedColumnName =
"firstName")
+ })
+ public Parent parent;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof ChildPk ) ) return false;
+
+ final ChildPk childPk = (ChildPk) o;
+
+ if ( nthChild != childPk.nthChild ) return false;
+ if ( !parent.equals( childPk.parent ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = nthChild;
+ result = 29 * result + parent.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/CompositeIdTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/CompositeIdTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/CompositeIdTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,280 @@
+//$Id: CompositeIdTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * test some composite id functionalities
+ *
+ * @author Emmanuel Bernard
+ */
+public class CompositeIdTest extends TestCase {
+ public CompositeIdTest(String x) {
+ super( x );
+ }
+
+ public void testOneToOneInCompositePk() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ B b = new B();
+ C c = new C();
+ s.persist( b );
+ s.persist( c );
+ A a = new A();
+ a.setAId( new AId() );
+ a.getAId().setB( b );
+ a.getAId().setC( c );
+ s.persist( a );
+ s.flush();
+ s.clear();
+
+ a = (A) s.get(A.class, a.getAId() );
+ assertEquals( b.getId(), a.getAId().getB().getId() );
+
+ tx.rollback();
+ s.close();
+ }
+
+
+ /**
+ * This feature is not supported by the EJB3
+ * this is an hibernate extension
+ */
+ public void testManyToOneInCompositePk() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ ParentPk ppk = new ParentPk();
+ ppk.setFirstName( "Emmanuel" );
+ ppk.setLastName( "Bernard" );
+ Parent p = new Parent();
+ p.id = ppk;
+ s.persist( p );
+ ChildPk cpk = new ChildPk();
+ cpk.parent = p;
+ cpk.nthChild = 1;
+ Child c = new Child();
+ c.id = cpk;
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "select c from Child c where c.id.nthChild = :nth"
);
+ q.setInteger( "nth", 1 );
+ List results = q.list();
+ assertEquals( 1, results.size() );
+ c = (Child) results.get( 0 );
+ assertNotNull( c );
+ assertNotNull( c.id.parent );
+ //FIXME mke it work in unambigious cases
+ // assertNotNull(c.id.parent.id);
+ // assertEquals(p.id.getFirstName(), c.id.parent.id.getFirstName());
+ s.delete( c );
+ s.delete( c.id.parent );
+ tx.commit();
+ s.close();
+ }
+
+ /**
+ * This feature is not supported by the EJB3
+ * this is an hibernate extension
+ */
+ public void testManyToOneInCompositePkAndSubclass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ ParentPk ppk = new ParentPk();
+ ppk.setFirstName( "Emmanuel" );
+ ppk.setLastName( "Bernard" );
+ Parent p = new Parent();
+ p.id = ppk;
+ s.persist( p );
+ ChildPk cpk = new ChildPk();
+ cpk.parent = p;
+ cpk.nthChild = 1;
+ LittleGenius c = new LittleGenius();
+ c.particularSkill = "Human Annotation parser";
+ c.id = cpk;
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "select c from Child c where c.id.nthChild = :nth"
);
+ q.setInteger( "nth", 1 );
+ List results = q.list();
+ assertEquals( 1, results.size() );
+ c = (LittleGenius) results.get( 0 );
+ assertNotNull( c );
+ assertNotNull( c.id.parent );
+ //FIXME mke it work in unambigious cases
+// assertNotNull(c.id.parent.id);
+// assertEquals(p.id.getFirstName(), c.id.parent.id.getFirstName());
+ s.delete( c );
+ s.delete( c.id.parent );
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOneInCompositeId() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Channel channel = new Channel();
+ s.persist( channel );
+ Presenter pres = new Presenter();
+ pres.name = "Casimir";
+ s.persist( pres );
+ TvMagazinPk pk = new TvMagazinPk();
+ TvMagazin mag = new TvMagazin();
+ mag.time = new Date();
+ mag.id = pk;
+ //pk.name = "Trax";
+ pk.channel = channel;
+ pk.presenter = pres;
+ s.persist( mag );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ mag = (TvMagazin) s.createQuery( "from TvMagazin mag" ) // where mag.id.name
= :name")
+ //.setParameter( "name", "Trax" )
+ .uniqueResult();
+ assertNotNull( mag.id );
+ assertNotNull( mag.id.channel );
+ assertEquals( channel.id, mag.id.channel.id );
+ assertNotNull( mag.id.presenter );
+ assertEquals( pres.name, mag.id.presenter.name );
+ s.delete( mag );
+ s.delete( mag.id.channel );
+ s.delete( mag.id.presenter );
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOneInCompositeIdClass() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Order order = new Order();
+ s.persist( order );
+ Product product = new Product();
+ product.name = "small car";
+ s.persist( product );
+ OrderLinePk pk = new OrderLinePk();
+ OrderLine orderLine = new OrderLine();
+ orderLine.order = order;
+ orderLine.product = product;
+ s.persist( orderLine );
+ s.flush();
+ s.clear();
+
+ orderLine = (OrderLine) s.createQuery( "select ol from OrderLine ol"
).uniqueResult();
+ assertNotNull( orderLine.order );
+ assertEquals( order.id, orderLine.order.id );
+ assertNotNull( orderLine.product );
+ assertEquals( product.name, orderLine.product.name );
+
+ tx.rollback();
+ s.close();
+ }
+
+ public void testSecondaryTableWithCompositeId() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Channel channel = new Channel();
+ s.persist( channel );
+ Presenter pres = new Presenter();
+ pres.name = "Tim Russet";
+ s.persist( pres );
+ TvMagazinPk pk = new TvMagazinPk();
+ TvProgram program = new TvProgram();
+ program.time = new Date();
+ program.id = pk;
+ program.text = "Award Winning Programming";
+ //pk.name = "Trax";
+ pk.channel = channel;
+ pk.presenter = pres;
+ s.persist( program );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ program = (TvProgram) s.createQuery( "from TvProgram pr" ) // where
mag.id.name = :name")
+ //.setParameter( "name", "Trax" )
+ .uniqueResult();
+ assertNotNull( program.id );
+ assertNotNull( program.id.channel );
+ assertEquals( channel.id, program.id.channel.id );
+ assertNotNull( program.id.presenter );
+ assertNotNull( program.text );
+ assertEquals( pres.name, program.id.presenter.name );
+ s.delete( program );
+ s.delete( program.id.channel );
+ s.delete( program.id.presenter );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSecondaryTableWithIdClass() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Channel channel = new Channel();
+ s.persist( channel );
+ Presenter pres = new Presenter();
+ pres.name = "Bob";
+ s.persist( pres );
+ TvProgramIdClass program = new TvProgramIdClass();
+ program.time = new Date();
+ program.channel = channel;
+ program.presenter = pres;
+ program.text = "Jump the shark programming";
+ //pk.name = "Trax";
+ s.persist( program );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ program = (TvProgramIdClass) s.createQuery( "from TvProgramIdClass pr" ) //
where mag.id.name = :name")
+ //.setParameter( "name", "Trax" )
+ .uniqueResult();
+ assertNotNull( program.channel );
+ assertEquals( channel.id, program.channel.id );
+ assertNotNull( program.presenter );
+ assertNotNull( program.text );
+ assertEquals( pres.name, program.presenter.name );
+ s.delete( program );
+ s.delete( program.channel );
+ s.delete( program.presenter );
+ tx.commit();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Parent.class,
+ Child.class,
+ Channel.class,
+ TvMagazin.class,
+ TvProgramIdClass.class,
+ TvProgram.class,
+ Presenter.class,
+ Order.class,
+ Product.class,
+ OrderLine.class,
+ OrderLinePk.class,
+ LittleGenius.class,
+ A.class,
+ B.class,
+ C.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/LittleGenius.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/LittleGenius.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/LittleGenius.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+
+/**
+ * Hierarchy with cid + many to one
+ * @author Anthony
+ *
+ */
+@Entity
+@PrimaryKeyJoinColumns({
+@PrimaryKeyJoinColumn(name = "nthChild"),
+@PrimaryKeyJoinColumn(name = "parentLastName"),
+@PrimaryKeyJoinColumn(name = "parentFirstName")})
+public class LittleGenius extends Child {
+ public String particularSkill;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Order.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Order.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Order.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "OrderTableFoobar")
+public class Order {
+ @Id
+ @GeneratedValue
+ public Integer id;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLine.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLine.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLine.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.IdClass;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(OrderLinePk.class)
+public class OrderLine {
+ @Id
+ public Order order;
+ @Id
+ public Product product;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLinePk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLinePk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/OrderLinePk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+package org.hibernate.test.annotations.cid;
+
+
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderLinePk implements Serializable {
+ @ManyToOne
+ @JoinColumn(name = "foo", nullable = false)
+ public Order order;
+ @ManyToOne
+ @JoinColumn(name = "bar", nullable = false)
+ public Product product;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Parent.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Parent.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Parent.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: Parent.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * Entity with composite id
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Parent {
+ @EmbeddedId
+ public ParentPk id;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Parent ) ) return false;
+
+ final Parent parent = (Parent) o;
+
+ if ( !id.equals( parent.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ParentPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ParentPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/ParentPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: ParentPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+public class ParentPk implements Serializable {
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+
+ private String firstName;
+ @Column(name = "p_lname")
+ private String lastName;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof ParentPk ) ) return false;
+
+ final ParentPk parentPk = (ParentPk) o;
+
+ if ( !firstName.equals( parentPk.firstName ) ) return false;
+ if ( !lastName.equals( parentPk.lastName ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstName.hashCode();
+ result = 29 * result + lastName.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Presenter.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Presenter.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Presenter.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+//$Id: Presenter.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Presenter {
+ @Id
+ public String name;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Product.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Product.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/Product.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Product {
+ @Id
+ public String name;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazin.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazin.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazin.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: TvMagazin.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.util.Date;
+import javax.persistence.AssociationOverride;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AssociationOverride(name = "id.channel", joinColumns = @JoinColumn(name =
"chan_id"))
+public class TvMagazin {
+ @EmbeddedId
+ public TvMagazinPk id;
+ @Temporal(TemporalType.TIME)
+ Date time;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazinPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazinPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvMagazinPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+//$Id: TvMagazinPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class TvMagazinPk implements Serializable {
+ @ManyToOne
+ public Channel channel;
+ //public String name;
+ @ManyToOne
+ public Presenter presenter;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgram.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgram.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgram.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: TvProgram.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+/**
+ * @author Chandra Patni
+ */
+@Entity
+@SecondaryTable( name = "TV_PROGRAM_EXT", pkJoinColumns = {
+@PrimaryKeyJoinColumn( name = "CHANNEL_ID" ),
+@PrimaryKeyJoinColumn( name = "PRESENTER_NAME" )
+ } )
+public class TvProgram {
+ @EmbeddedId
+ public TvMagazinPk id;
+
+ @Temporal( TemporalType.TIME )
+ Date time;
+
+ @Column( name = "TXT", table = "TV_PROGRAM_EXT" )
+ public String text;
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgramIdClass.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgramIdClass.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/cid/TvProgramIdClass.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: TvProgramIdClass.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.cid;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@Entity
+@SecondaryTable( name = "TV_PROGRAM_IDCLASS", pkJoinColumns =
+ {
+ @PrimaryKeyJoinColumn( name = "CHANNEL_ID" ),
+ @PrimaryKeyJoinColumn( name = "PRESENTER_NAME" )
+ } )
+@IdClass( TvMagazinPk.class )
+public class TvProgramIdClass {
+ @Id
+ public Channel channel;
+ @Id
+ public Presenter presenter;
+
+ @Temporal( TemporalType.TIME )
+ Date time;
+
+ @Column( name = "TXT", table = "TV_PROGRAM_IDCLASS" )
+ public String text;
+}
+
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Boy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Boy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Boy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,134 @@
+//$Id: Boy.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AttributeOverrides({
+ @AttributeOverride( name="characters.element", column =
@Column(name="fld_character") ),
+ @AttributeOverride( name="scorePerNickName.element", column =
@Column(name="fld_score") ),
+ @AttributeOverride( name="favoriteToys.element.brand.surname", column =
@Column(name = "fld_surname"))}
+)
+public class Boy {
+ private Integer id;
+ private String firstName;
+ private String lastName;
+ private Set<String> nickNames = new HashSet<String>();
+ private Map<String, Integer> scorePerNickName = new HashMap<String,
Integer>();
+ private int[] favoriteNumbers;
+ private Set<Toy> favoriteToys = new HashSet<Toy>();
+ private Set<Character> characters = new HashSet<Character>();
+ private Set<CountryAttitude> countryAttitudes = new
HashSet<CountryAttitude>();
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ @CollectionOfElements
+ public Set<String> getNickNames() {
+ return nickNames;
+ }
+
+ public void setNickNames(Set<String> nickName) {
+ this.nickNames = nickName;
+ }
+
+ @CollectionOfElements
+ @JoinTable(name = "ScorePerNickName", joinColumns = @JoinColumn(name =
"BoyId"))
+ @Column(name = "score", nullable = false)
+ public Map<String, Integer> getScorePerNickName() {
+ return scorePerNickName;
+ }
+
+ public void setScorePerNickName(Map<String, Integer> scorePerNickName) {
+ this.scorePerNickName = scorePerNickName;
+ }
+
+ @CollectionOfElements
+ @JoinTable(
+ name = "BoyFavoriteNumbers",
+ joinColumns = @JoinColumn(name = "BoyId")
+ )
+ @Column(name = "favoriteNumber", nullable = false)
+ @IndexColumn(name = "nbr_index")
+ public int[] getFavoriteNumbers() {
+ return favoriteNumbers;
+ }
+
+ public void setFavoriteNumbers(int[] favoriteNumbers) {
+ this.favoriteNumbers = favoriteNumbers;
+ }
+
+ @CollectionOfElements
+ @AttributeOverride(name = "element.serial", column = @Column(name =
"serial_nbr"))
+ public Set<Toy> getFavoriteToys() {
+ return favoriteToys;
+ }
+
+ public void setFavoriteToys(Set<Toy> favoriteToys) {
+ this.favoriteToys = favoriteToys;
+ }
+
+ @CollectionOfElements
+ @Enumerated(EnumType.STRING)
+ public Set<Character> getCharacters() {
+ return characters;
+ }
+
+ public void setCharacters(Set<Character> characters) {
+ this.characters = characters;
+ }
+
+ @CollectionOfElements(fetch = FetchType.EAGER)
+ //@Where(clause = "b_likes=false")
+ public Set<CountryAttitude> getCountryAttitudes() {
+ return countryAttitudes;
+ }
+
+ public void setCountryAttitudes(Set<CountryAttitude> countryAttitudes) {
+ this.countryAttitudes = countryAttitudes;
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Brand.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Brand.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Brand.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: Brand.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Brand {
+ private String name;
+ private String surname;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSurname() {
+ return surname;
+ }
+
+ public void setSurname(String surname) {
+ this.surname = surname;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final Brand brand = (Brand) o;
+
+ if ( !name.equals( brand.name ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Character.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Character.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Character.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.collectionelement;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Character {
+ GENTLE,
+ NORMAL,
+ AGGRESSIVE,
+ ATTENTIVE,
+ VIOLENT,
+ CRAFTY
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,213 @@
+//$Id: CollectionElementTest.java 14754 2008-06-09 15:57:07Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.hibernate.Filter;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Country;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+@SuppressWarnings("unchecked")
+public class CollectionElementTest extends TestCase {
+
+ public void testSimpleElement() throws Exception {
+ assertEquals(
+ "BoyFavoriteNumbers",
+ getCfg().getCollectionMapping( Boy.class.getName() + '.' +
"favoriteNumbers" )
+ .getCollectionTable().getName()
+ );
+ Session s = openSession();
+ s.getTransaction().begin();
+ Boy boy = new Boy();
+ boy.setFirstName( "John" );
+ boy.setLastName( "Doe" );
+ boy.getNickNames().add( "Johnny" );
+ boy.getNickNames().add( "Thing" );
+ boy.getScorePerNickName().put( "Johnny", new Integer( 3 ) );
+ boy.getScorePerNickName().put( "Thing", new Integer( 5 ) );
+ int[] favNbrs = new int[4];
+ for (int index = 0; index < favNbrs.length - 1; index++) {
+ favNbrs[index] = index * 3;
+ }
+ boy.setFavoriteNumbers( favNbrs );
+ boy.getCharacters().add( Character.GENTLE );
+ boy.getCharacters().add( Character.CRAFTY );
+ s.persist( boy );
+ s.getTransaction().commit();
+ s.clear();
+ Transaction tx = s.beginTransaction();
+ boy = (Boy) s.get( Boy.class, boy.getId() );
+ assertNotNull( boy.getNickNames() );
+ assertTrue( boy.getNickNames().contains( "Thing" ) );
+ assertNotNull( boy.getScorePerNickName() );
+ assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
+ assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
+ assertNotNull( boy.getFavoriteNumbers() );
+ assertEquals( 3, boy.getFavoriteNumbers()[1] );
+ assertTrue( boy.getCharacters().contains( Character.CRAFTY ) );
+ List result = s.createQuery( "select boy from Boy boy join boy.nickNames names
where names = :name" )
+ .setParameter( "name", "Thing" ).list();
+ assertEquals( 1, result.size() );
+ s.delete( boy );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositeElement() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Boy boy = new Boy();
+ boy.setFirstName( "John" );
+ boy.setLastName( "Doe" );
+ Toy toy = new Toy();
+ toy.setName( "Balloon" );
+ toy.setSerial( "serial001" );
+ toy.setBrand( new Brand() );
+ toy.getBrand().setName( "Bandai" );
+ boy.getFavoriteToys().add( toy );
+ s.persist( boy );
+ s.getTransaction().commit();
+ s.clear();
+ Transaction tx = s.beginTransaction();
+ boy = (Boy) s.get( Boy.class, boy.getId() );
+ assertNotNull( boy.getFavoriteToys() );
+ assertTrue( boy.getFavoriteToys().contains( toy ) );
+ assertEquals( "@Parent is failing", boy,
boy.getFavoriteToys().iterator().next().getOwner() );
+ s.delete( boy );
+ tx.commit();
+ s.close();
+ }
+
+ public void testAttributedJoin() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Country country = new Country();
+ country.setName( "Australia" );
+ s.persist( country );
+
+ Boy boy = new Boy();
+ boy.setFirstName( "John" );
+ boy.setLastName( "Doe" );
+ CountryAttitude attitude = new CountryAttitude();
+ // TODO: doesn't work
+ attitude.setBoy( boy );
+ attitude.setCountry( country );
+ attitude.setLikes( true );
+ boy.getCountryAttitudes().add( attitude );
+ s.persist( boy );
+ s.getTransaction().commit();
+ s.clear();
+
+ Transaction tx = s.beginTransaction();
+ boy = (Boy) s.get( Boy.class, boy.getId() );
+ assertTrue( boy.getCountryAttitudes().contains( attitude ) );
+ s.delete( boy );
+ s.delete( s.get( Country.class, country.getId() ) );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testLazyCollectionofElements() throws Exception {
+ assertEquals(
+ "BoyFavoriteNumbers",
+ getCfg().getCollectionMapping( Boy.class.getName() + '.' +
"favoriteNumbers" )
+ .getCollectionTable().getName()
+ );
+ Session s = openSession();
+ s.getTransaction().begin();
+ Boy boy = new Boy();
+ boy.setFirstName( "John" );
+ boy.setLastName( "Doe" );
+ boy.getNickNames().add( "Johnny" );
+ boy.getNickNames().add( "Thing" );
+ boy.getScorePerNickName().put( "Johnny", new Integer( 3 ) );
+ boy.getScorePerNickName().put( "Thing", new Integer( 5 ) );
+ int[] favNbrs = new int[4];
+ for (int index = 0; index < favNbrs.length - 1; index++) {
+ favNbrs[index] = index * 3;
+ }
+ boy.setFavoriteNumbers( favNbrs );
+ boy.getCharacters().add( Character.GENTLE );
+ boy.getCharacters().add( Character.CRAFTY );
+ s.persist( boy );
+ s.getTransaction().commit();
+ s.clear();
+ Transaction tx = s.beginTransaction();
+ boy = (Boy) s.get( Boy.class, boy.getId() );
+ assertNotNull( boy.getNickNames() );
+ assertTrue( boy.getNickNames().contains( "Thing" ) );
+ assertNotNull( boy.getScorePerNickName() );
+ assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
+ assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
+ assertNotNull( boy.getFavoriteNumbers() );
+ assertEquals( 3, boy.getFavoriteNumbers()[1] );
+ assertTrue( boy.getCharacters().contains( Character.CRAFTY ) );
+ List result = s.createQuery( "select boy from Boy boy join boy.nickNames names
where names = :name" )
+ .setParameter( "name", "Thing" ).list();
+ assertEquals( 1, result.size() );
+ s.delete( boy );
+ tx.commit();
+ s.close();
+ }
+
+ public void testFetchEagerAndFilter() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ TestCourse test = new TestCourse();
+
+ LocalizedString title = new LocalizedString( "title in english" );
+ title.getVariations().put( Locale.FRENCH.getLanguage(), "title en francais"
);
+ test.setTitle( title );
+ s.save( test );
+
+ s.flush();
+ s.clear();
+
+ Filter filter = s.enableFilter( "selectedLocale" );
+ filter.setParameter( "param", "fr" );
+
+ Query q = s.createQuery( "from TestCourse t" );
+ List l = q.list();
+ assertEquals( 1, l.size() );
+
+ TestCourse t = (TestCourse) s.get( TestCourse.class, test.getTestCourseId() );
+ assertEquals( 1, t.getTitle().getVariations().size() );
+
+ tx.rollback();
+
+ s.close();
+ }
+
+ public void testMapKeyType() throws Exception {
+ Matrix m = new Matrix();
+ m.getValues().put( 1, 1.1f );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( m );
+ s.flush();
+ s.clear();
+ m = (Matrix) s.get( Matrix.class, m.getId() );
+ assertEquals( 1.1f, m.getValues().get( 1 ) );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Boy.class,
+ Country.class,
+ TestCourse.class,
+ Matrix.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CountryAttitude.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CountryAttitude.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/CountryAttitude.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,59 @@
+//$Id: CountryAttitude.java 14754 2008-06-09 15:57:07Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.test.annotations.Country;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class CountryAttitude {
+ private Boy boy;
+ private Country country;
+ private boolean likes;
+
+ // TODO: This currently does not work
+// @ManyToOne(optional = false)
+// public Boy getBoy() {
+// return boy;
+// }
+
+ public void setBoy(Boy boy) {
+ this.boy = boy;
+ }
+
+ @ManyToOne(optional = false)
+ public Country getCountry() {
+ return country;
+ }
+
+ public void setCountry(Country country) {
+ this.country = country;
+ }
+
+ @Column(name = "b_likes")
+ public boolean isLikes() {
+ return likes;
+ }
+
+ public void setLikes(boolean likes) {
+ this.likes = likes;
+ }
+
+ @Override
+ public int hashCode() {
+ return country.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( !( obj instanceof CountryAttitude ) ) {
+ return false;
+ }
+ return country.equals( ( (CountryAttitude) obj ).country );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: LocalizedString.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Locale;
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.Filter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class LocalizedString implements Serializable {
+
+ private static final Locale DEFAULT_LOCALE = Locale.ENGLISH;
+
+ public LocalizedString() {
+ }
+
+ public LocalizedString(String string) {
+ this.getVariations().put( DEFAULT_LOCALE.getLanguage(), string );
+ }
+
+ private Map<String, String> variations =
+ new HashMap<String, String>( 1 );
+
+ @CollectionOfElements
+ @MapKey( columns = @Column( name = "language_code" ) )
+ @Fetch( FetchMode.JOIN )
+ @Filter( name = "selectedLocale",
+ condition = " language_code = :param " )
+ public Map<String, String> getVariations() {
+ return variations;
+ }
+
+ public void setVariations(Map<String, String> variations) {
+ this.variations = variations;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Matrix.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Matrix.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Matrix.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+//$
+package org.hibernate.test.annotations.collectionelement;
+
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.SortType;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Matrix {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ @MapKey(type = @Type(type="integer") )
+ @CollectionOfElements
+ @Sort(type = SortType.NATURAL)
+ @Type(type = "float")
+ private SortedMap<Integer, Float> values = new TreeMap<Integer, Float>();
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Map<Integer, Float> getValues() {
+ return values;
+ }
+
+ public void setValues(SortedMap<Integer, Float> values) {
+ this.values = values;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/TestCourse.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/TestCourse.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/TestCourse.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: TestCourse.java 14754 2008-06-09 15:57:07Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.ParamDef;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@FilterDef(name="selectedLocale", parameters={ @ParamDef(
name="param", type="string" ) } )
+public class TestCourse {
+
+ private Long testCourseId;
+
+ private LocalizedString title;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ public Long getTestCourseId() {
+ return testCourseId;
+ }
+
+ public void setTestCourseId(Long testCourseId) {
+ this.testCourseId = testCourseId;
+ }
+
+ @Embedded
+ public LocalizedString getTitle() {
+ return title;
+ }
+
+ public void setTitle(LocalizedString title) {
+ this.title = title;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Toy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Toy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/Toy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: Toy.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.Parent;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Toy {
+ private String name;
+ private Brand brand;
+ private String serial;
+ private Boy owner;
+
+ @AttributeOverride(name = "name", column = @Column(name =
"brand_name"))
+ public Brand getBrand() {
+ return brand;
+ }
+
+ public void setBrand(Brand brand) {
+ this.brand = brand;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSerial() {
+ return serial;
+ }
+
+ public void setSerial(String serial) {
+ this.serial = serial;
+ }
+
+ @Parent
+ public Boy getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Boy owner) {
+ this.owner = owner;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final Toy toy = (Toy) o;
+
+ if ( !brand.equals( toy.brand ) ) return false;
+ if ( !name.equals( toy.name ) ) return false;
+ if ( !serial.equals( toy.serial ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = name.hashCode();
+ result = 29 * result + brand.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/A.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/A.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/A.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+//$
+package org.hibernate.test.annotations.collectionelement.deepcollectionelements;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.IndexColumn;
+
+@Entity
+@Table( name = "A" )
+public class A {
+ @Id
+ @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "aSequence"
)
+ @SequenceGenerator( name = "aSequence", sequenceName = "seq_A" )
+ private int id;
+ @CollectionOfElements
+ @IndexColumn( name = "ndx" )
+ private List<B> listOfB;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public List<B> getListOfB() {
+ return listOfB;
+ }
+
+ public void setListOfB(List<B> listOfB) {
+ this.listOfB = listOfB;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/B.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/B.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/B.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,36 @@
+//$
+package org.hibernate.test.annotations.collectionelement.deepcollectionelements;
+
+import java.util.List;
+import javax.persistence.Embeddable;
+import javax.persistence.Transient;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.IndexColumn;
+
+@Embeddable
+public class B {
+ private String name;
+
+ //@CollectionOfElements
+ @OneToMany
+ @IndexColumn( name = "ndx" )
+ private List<C> listOfC;
+
+ public List<C> getListOfC() {
+ return listOfC;
+ }
+
+ public void setListOfC(List<C> listOfC) {
+ this.listOfC = listOfC;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/C.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/C.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/C.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$
+package org.hibernate.test.annotations.collectionelement.deepcollectionelements;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+
+
+@Entity
+public class C {
+ @Id
+ @GeneratedValue
+ private int id;
+
+ @Column( length = 500 )
+ private String comment;
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/DeepCollectionElementTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/DeepCollectionElementTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/deepcollectionelements/DeepCollectionElementTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$
+package org.hibernate.test.annotations.collectionelement.deepcollectionelements;
+
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+//TEST not used: wait for ANN-591 and HHH-3157
+public class DeepCollectionElementTest extends TestCase {
+
+ public void testInitialization() throws Exception {
+ //test only the SF creation
+
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ //A.class,
+ //B.class,
+ //C.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Contact.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Contact.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Contact.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$
+package org.hibernate.test.annotations.collectionelement.indexedCollection;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Contact {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/IndexedCollectionOfElementsTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/IndexedCollectionOfElementsTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/IndexedCollectionOfElementsTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,32 @@
+//$
+package org.hibernate.test.annotations.collectionelement.indexedCollection;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IndexedCollectionOfElementsTest extends TestCase {
+
+ public void testIndexedCollectionOfElements() throws Exception {
+ Sale sale = new Sale();
+ Contact contact = new Contact();
+ contact.setName( "Emmanuel" );
+ sale.getContacts().add(contact);
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.save( sale );
+ s.flush();
+ s.get( Sale.class, sale.getId() );
+ assertEquals( 1, sale.getContacts().size() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Sale.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Sale.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Sale.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/collectionelement/indexedCollection/Sale.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$
+package org.hibernate.test.annotations.collectionelement.indexedCollection;
+
+import java.util.List;
+import java.util.ArrayList;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@GenericGenerator(name="increment", strategy = "increment")
+public class Sale {
+ @Id @GeneratedValue private Integer id;
+
+ @CollectionOfElements
+ @JoinTable(
+ name = "contact",
+ joinColumns = @JoinColumn(name = "n_key_person"))
+ @CollectionId(
+ columns = @Column(name = "n_key_contact"),
+ type = @Type(type = "long"),
+ generator = "increment" )
+ private List<Contact> contacts = new ArrayList<Contact>();
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public List<Contact> getContacts() {
+ return contacts;
+ }
+
+ public void setContacts(List<Contact> contacts) {
+ this.contacts = contacts;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/ConfigurationTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/ConfigurationTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/ConfigurationTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: ConfigurationTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.configuration;
+
+import junit.framework.TestCase;
+import org.hibernate.cfg.AnnotationConfiguration;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ConfigurationTest extends TestCase {
+ public void testMixPackageAndResourceOrdering() throws Exception {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addResource( "org/hibernate/test/annotations/configuration/orm.xml"
);
+ config.addPackage( "org.hibernate.test.annotations.configuration" );
+ }
+ catch( Exception e ) {
+ fail("Processing package first when ORM.xml is used should not fail");
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/orm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/orm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/orm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings
+
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_1_0.xsd"
+ version="1.0">
+</entity-mappings>
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/package-info.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/package-info.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/configuration/package-info.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,4 @@
+@GenericGenerator(name = "myGenerator", strategy = "sequence")
+package org.hibernate.test.annotations.configuration;
+
+import org.hibernate.annotations.GenericGenerator;
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,28 @@
+//$Id: DuplicateTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.duplicatedgenerator;
+
+import junit.framework.TestCase;
+import org.hibernate.AnnotationException;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DuplicateTest extends TestCase {
+ public void testDuplicateEntityName() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ try {
+ cfg.addAnnotatedClass( Flight.class );
+ cfg.addAnnotatedClass( org.hibernate.test.annotations.Flight.class );
+ cfg.addResource( "org/hibernate/test/annotations/orm.xml");
+ cfg.addResource(
"org/hibernate/test/annotations/duplicatedgenerator/orm.xml");
+ cfg.buildSessionFactory();
+ fail( "Should not be able to map the same entity name twice" );
+ }
+ catch (AnnotationException ae) {
+ //success
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/Flight.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/Flight.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/Flight.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+//$Id: Flight.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.duplicatedgenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Here to test duplicate import
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_flight")
+public class Flight {
+ @Id
+ public String id;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/orm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/orm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/duplicatedgenerator/orm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="1.0"
+ >
+ <table-generator name="EMP_GEN" table="GENERATOR_TABLE"
+ pk-column-name="pkey" pk-column-value="EMP"
+ value-column-name="hi"
allocation-size="20"/>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Address.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Address.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Address.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: Address.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Address implements Serializable {
+ String address1;
+ @Column(name = "fld_city")
+ String city;
+ Country country;
+ @ManyToOne
+ AddressType type;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/AddressType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/AddressType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/AddressType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: AddressType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Kind of address (home, professional etc)
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class AddressType {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Book.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Book.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Book.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: Book.java 15073 2008-08-14 17:32:44Z epbernard $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SecondaryTable(name = "BookSummary")
+public class Book {
+ private String isbn;
+ private String name;
+ private Summary summary;
+
+ @Id
+ public String getIsbn() {
+ return isbn;
+ }
+
+ public void setIsbn(String isbn) {
+ this.isbn = isbn;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @AttributeOverrides({
+ @AttributeOverride(name = "size", column = @Column(name="summ_size",
table = "BookSummary")),
+ @AttributeOverride(name = "text", column = @Column(table =
"BookSummary"))
+ })
+ public Summary getSummary() {
+ return summary;
+ }
+
+ public void setSummary(Summary summary) {
+ this.summary = summary;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/CorpType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/CorpType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/CorpType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: CorpType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CorpType {
+ private Integer id;
+ private String type;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Country.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Country.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Country.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: Country.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * Non realistic embedded dependent object
+ *
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+//access = AccessType.PROPERTY)
+@AccessType("property")
+public class Country implements Serializable {
+ private String iso2;
+ private String name;
+
+ public String getIso2() {
+ return iso2;
+ }
+
+ public void setIso2(String iso2) {
+ this.iso2 = iso2;
+ }
+
+ @Column(name = "countryName")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Deal.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Deal.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Deal.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: Deal.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Embedded;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Deal {
+ /**
+ * Deal ID.
+ */
+ private String id;
+
+ @Id
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * Swap with the tenor.
+ */
+ private Swap swap;
+
+ @Embedded
+ public Swap getSwap() {
+ return swap;
+ }
+
+ public void setSwap(Swap swap) {
+ this.swap = swap;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/EmbeddedTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/EmbeddedTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/EmbeddedTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,386 @@
+//$Id: EmbeddedTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.embedded.FloatLeg.RateIndex;
+import org.hibernate.test.annotations.embedded.Leg.Frequency;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmbeddedTest extends TestCase {
+
+ public void testSimple() throws Exception {
+ Session s;
+ Transaction tx;
+ Person p = new Person();
+ Address a = new Address();
+ Country c = new Country();
+ Country bornCountry = new Country();
+ c.setIso2( "DM" );
+ c.setName( "Matt Damon Land" );
+ bornCountry.setIso2( "US" );
+ bornCountry.setName( "United States of America" );
+
+ a.address1 = "colorado street";
+ a.city = "Springfield";
+ a.country = c;
+ p.address = a;
+ p.bornIn = bornCountry;
+ p.name = "Homer";
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( p );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ p = (Person) s.get( Person.class, p.id );
+ assertNotNull( p );
+ assertNotNull( p.address );
+ assertEquals( "Springfield", p.address.city );
+ assertNotNull( p.address.country );
+ assertEquals( "DM", p.address.country.getIso2() );
+ assertNotNull( p.bornIn );
+ assertEquals( "US", p.bornIn.getIso2() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositeId() throws Exception {
+ Session s;
+ Transaction tx;
+ RegionalArticlePk pk = new RegionalArticlePk();
+ pk.iso2 = "FR";
+ pk.localUniqueKey = "1234567890123";
+ RegionalArticle reg = new RegionalArticle();
+ reg.setName( "Je ne veux pes rester sage - Dolly" );
+ reg.setPk( pk );
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( reg );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ reg = (RegionalArticle) s.get( RegionalArticle.class, (Serializable) reg.getPk() );
+ assertNotNull( reg );
+ assertNotNull( reg.getPk() );
+ assertEquals( "Je ne veux pes rester sage - Dolly", reg.getName() );
+ assertEquals( "FR", reg.getPk().iso2 );
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOneInsideComponent() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Person p = new Person();
+ Country bornIn = new Country();
+ bornIn.setIso2( "FR" );
+ bornIn.setName( "France" );
+ p.bornIn = bornIn;
+ p.name = "Emmanuel";
+ AddressType type = new AddressType();
+ type.setName( "Primary Home" );
+ s.persist( type );
+ Country currentCountry = new Country();
+ currentCountry.setIso2( "US" );
+ currentCountry.setName( "USA" );
+ Address add = new Address();
+ add.address1 = "4 square street";
+ add.city = "San diego";
+ add.country = currentCountry;
+ add.type = type;
+ p.address = add;
+ s.persist( p );
+ tx.commit();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "select p from Person p where p.address.city =
:city" );
+ q.setString( "city", add.city );
+ List result = q.list();
+ Person samePerson = (Person) result.get( 0 );
+ assertNotNull( samePerson.address.type );
+ assertEquals( type.getName(), samePerson.address.type.getName() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEmbeddedSuperclass() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ VanillaSwap swap = new VanillaSwap();
+ swap.setInstrumentId( "US345421" );
+ swap.setCurrency( VanillaSwap.Currency.EUR );
+ FixedLeg fixed = new FixedLeg();
+ fixed.setPaymentFrequency( Leg.Frequency.SEMIANNUALLY );
+ fixed.setRate( 5.6 );
+ FloatLeg floating = new FloatLeg();
+ floating.setPaymentFrequency( Leg.Frequency.QUARTERLY );
+ floating.setRateIndex( FloatLeg.RateIndex.LIBOR );
+ floating.setRateSpread( 1.1 );
+ swap.setFixedLeg( fixed );
+ swap.setFloatLeg( floating );
+ s.persist( swap );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ swap = (VanillaSwap) s.get( VanillaSwap.class, swap.getInstrumentId() );
+ // All fields must be filled with non-default values
+ fixed = swap.getFixedLeg();
+ assertNotNull( "Fixed leg retrieved as null", fixed );
+ floating = swap.getFloatLeg();
+ assertNotNull( "Floating leg retrieved as null", floating );
+ assertEquals( Leg.Frequency.SEMIANNUALLY, fixed.getPaymentFrequency() );
+ assertEquals( Leg.Frequency.QUARTERLY, floating.getPaymentFrequency() );
+ s.delete( swap );
+ tx.commit();
+ s.close();
+ }
+
+ public void testDottedProperty() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ // Create short swap
+ Swap shortSwap = new Swap();
+ shortSwap.setTenor( 2 );
+ FixedLeg shortFixed = new FixedLeg();
+ shortFixed.setPaymentFrequency( Frequency.SEMIANNUALLY );
+ shortFixed.setRate( 5.6 );
+ FloatLeg shortFloating = new FloatLeg();
+ shortFloating.setPaymentFrequency( Frequency.QUARTERLY );
+ shortFloating.setRateIndex( RateIndex.LIBOR );
+ shortFloating.setRateSpread( 1.1 );
+ shortSwap.setFixedLeg( shortFixed );
+ shortSwap.setFloatLeg( shortFloating );
+ // Create medium swap
+ Swap swap = new Swap();
+ swap.setTenor( 7 );
+ FixedLeg fixed = new FixedLeg();
+ fixed.setPaymentFrequency( Frequency.MONTHLY );
+ fixed.setRate( 7.6 );
+ FloatLeg floating = new FloatLeg();
+ floating.setPaymentFrequency( Frequency.MONTHLY );
+ floating.setRateIndex( RateIndex.TIBOR );
+ floating.setRateSpread( 0.8 );
+ swap.setFixedLeg( fixed );
+ swap.setFloatLeg( floating );
+ // Create long swap
+ Swap longSwap = new Swap();
+ longSwap.setTenor( 7 );
+ FixedLeg longFixed = new FixedLeg();
+ longFixed.setPaymentFrequency( Frequency.MONTHLY );
+ longFixed.setRate( 7.6 );
+ FloatLeg longFloating = new FloatLeg();
+ longFloating.setPaymentFrequency( Frequency.MONTHLY );
+ longFloating.setRateIndex( RateIndex.TIBOR );
+ longFloating.setRateSpread( 0.8 );
+ longSwap.setFixedLeg( longFixed );
+ longSwap.setFloatLeg( longFloating );
+ // Compose a curve spread deal
+ SpreadDeal deal = new SpreadDeal();
+ deal.setId( "FX45632" );
+ deal.setNotional( 450000.0 );
+ deal.setShortSwap( shortSwap );
+ deal.setSwap( swap );
+ deal.setLongSwap( longSwap );
+ s.persist( deal );
+
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ deal = (SpreadDeal) s.get( SpreadDeal.class, deal.getId() );
+ // All fields must be filled with non-default values
+ assertNotNull( "Short swap is null.", deal.getShortSwap() );
+ assertNotNull( "Swap is null.", deal.getSwap() );
+ assertNotNull( "Long swap is null.", deal.getLongSwap() );
+ assertEquals( 2, deal.getShortSwap().getTenor() );
+ assertEquals( 7, deal.getSwap().getTenor() );
+ assertEquals( 7, deal.getLongSwap().getTenor() );
+ assertNotNull( "Short fixed leg is null.", deal.getShortSwap().getFixedLeg()
);
+ assertNotNull( "Short floating leg is null.",
deal.getShortSwap().getFloatLeg() );
+ assertNotNull( "Fixed leg is null.", deal.getSwap().getFixedLeg() );
+ assertNotNull( "Floating leg is null.", deal.getSwap().getFloatLeg() );
+ assertNotNull( "Long fixed leg is null.", deal.getLongSwap().getFixedLeg()
);
+ assertNotNull( "Long floating leg is null.", deal.getLongSwap().getFloatLeg()
);
+ assertEquals( Frequency.SEMIANNUALLY,
deal.getShortSwap().getFixedLeg().getPaymentFrequency() );
+ assertEquals( Frequency.QUARTERLY,
deal.getShortSwap().getFloatLeg().getPaymentFrequency() );
+ assertEquals( Frequency.MONTHLY, deal.getSwap().getFixedLeg().getPaymentFrequency() );
+ assertEquals( Frequency.MONTHLY, deal.getSwap().getFloatLeg().getPaymentFrequency() );
+ assertEquals( Frequency.MONTHLY, deal.getLongSwap().getFixedLeg().getPaymentFrequency()
);
+ assertEquals( Frequency.MONTHLY, deal.getLongSwap().getFloatLeg().getPaymentFrequency()
);
+ assertEquals( 5.6, deal.getShortSwap().getFixedLeg().getRate() );
+ assertEquals( 7.6, deal.getSwap().getFixedLeg().getRate() );
+ assertEquals( 7.6, deal.getLongSwap().getFixedLeg().getRate() );
+ assertEquals( RateIndex.LIBOR, deal.getShortSwap().getFloatLeg().getRateIndex() );
+ assertEquals( RateIndex.TIBOR, deal.getSwap().getFloatLeg().getRateIndex() );
+ assertEquals( RateIndex.TIBOR, deal.getLongSwap().getFloatLeg().getRateIndex() );
+ assertEquals( 1.1, deal.getShortSwap().getFloatLeg().getRateSpread() );
+ assertEquals( 0.8, deal.getSwap().getFloatLeg().getRateSpread() );
+ assertEquals( 0.8, deal.getLongSwap().getFloatLeg().getRateSpread() );
+ s.delete( deal );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEmbeddedInSecdondaryTable() throws Exception {
+ Session s;
+ s = openSession();
+ s.getTransaction().begin();
+ Book book = new Book();
+ book.setIsbn( "1234" );
+ book.setName( "HiA Second Edition" );
+ Summary summary = new Summary();
+ summary.setText( "This is a HiA SE summary" );
+ summary.setSize( summary.getText().length() );
+ book.setSummary( summary );
+ s.persist( book );
+ s.getTransaction().commit();
+
+ s.clear();
+
+ Transaction tx = s.beginTransaction();
+ Book loadedBook = (Book) s.get( Book.class, book.getIsbn() );
+ assertNotNull( loadedBook.getSummary() );
+ assertEquals( book.getSummary().getText(), loadedBook.getSummary().getText() );
+ s.delete( loadedBook );
+ tx.commit();
+ s.close();
+ }
+
+ public void testParent() throws Exception {
+ Session s;
+ s = openSession();
+ s.getTransaction().begin();
+ Book book = new Book();
+ book.setIsbn( "1234" );
+ book.setName( "HiA Second Edition" );
+ Summary summary = new Summary();
+ summary.setText( "This is a HiA SE summary" );
+ summary.setSize( summary.getText().length() );
+ book.setSummary( summary );
+ s.persist( book );
+ s.getTransaction().commit();
+
+ s.clear();
+
+ Transaction tx = s.beginTransaction();
+ Book loadedBook = (Book) s.get( Book.class, book.getIsbn() );
+ assertNotNull( loadedBook.getSummary() );
+ assertEquals( loadedBook, loadedBook.getSummary().getSummarizedBook() );
+ s.delete( loadedBook );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEmbeddedAndMultipleManyToOne() throws Exception {
+ Session s;
+ s = openSession();
+ Transaction tx = s.beginTransaction();
+ CorpType type = new CorpType();
+ type.setType( "National" );
+ s.persist( type );
+ Nationality nat = new Nationality();
+ nat.setName( "Canadian" );
+ s.persist( nat );
+ InternetProvider provider = new InternetProvider();
+ provider.setBrandName( "Fido" );
+ LegalStructure structure = new LegalStructure();
+ structure.setCorporationType( type );
+ structure.setCountry( "Canada" );
+ structure.setName( "Rogers" );
+ provider.setOwner( structure );
+ structure.setOrigin( nat );
+ s.persist( provider );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ provider = (InternetProvider) s.get( InternetProvider.class, provider.getId() );
+ assertNotNull( provider.getOwner() );
+ assertNotNull( "Many to one not set",
provider.getOwner().getCorporationType() );
+ assertEquals( "Wrong link", type.getType(),
provider.getOwner().getCorporationType().getType() );
+ assertNotNull( "2nd Many to one not set", provider.getOwner().getOrigin() );
+ assertEquals( "Wrong 2nd link", nat.getName(),
provider.getOwner().getOrigin().getName() );
+ s.delete( provider );
+ s.delete( provider.getOwner().getCorporationType() );
+ s.delete( provider.getOwner().getOrigin() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEmbeddedAndOneToMany() throws Exception {
+ Session s;
+ s = openSession();
+ Transaction tx = s.beginTransaction();
+ InternetProvider provider = new InternetProvider();
+ provider.setBrandName( "Fido" );
+ LegalStructure structure = new LegalStructure();
+ structure.setCountry( "Canada" );
+ structure.setName( "Rogers" );
+ provider.setOwner( structure );
+ s.persist( provider );
+ Manager manager = new Manager();
+ manager.setName( "Bill" );
+ manager.setEmployer( provider );
+ structure.getTopManagement().add( manager );
+ s.persist( manager );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ provider = (InternetProvider) s.get( InternetProvider.class, provider.getId() );
+ assertNotNull( provider.getOwner() );
+ Set<Manager> topManagement = provider.getOwner().getTopManagement();
+ assertNotNull( "OneToMany not set", topManagement );
+ assertEquals( "Wrong number of elements", 1, topManagement.size() );
+ manager = (Manager) topManagement.iterator().next();
+ assertEquals( "Wrong element", "Bill", manager.getName() );
+ s.delete( manager );
+ s.delete( provider );
+ tx.commit();
+ s.close();
+ }
+
+ public EmbeddedTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Person.class,
+ RegionalArticle.class,
+ AddressType.class,
+ VanillaSwap.class,
+ SpreadDeal.class,
+ Book.class,
+ InternetProvider.class,
+ CorpType.class,
+ Nationality.class,
+ Manager.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FixedLeg.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FixedLeg.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FixedLeg.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+package org.hibernate.test.annotations.embedded;
+
+import java.text.NumberFormat;
+import javax.persistence.Embeddable;
+
+/**
+ * Represents fixed part of Interest Rate Swap cash flows.
+ */
+@Embeddable
+public class FixedLeg extends Leg {
+
+ /**
+ * Fixed rate.
+ */
+ private double rate;
+
+ public double getRate() {
+ return rate;
+ }
+
+ public void setRate(double rate) {
+ this.rate = rate;
+ }
+
+ public String toString() {
+ NumberFormat format = NumberFormat.getNumberInstance();
+ format.setMinimumFractionDigits( 4 );
+ format.setMaximumFractionDigits( 4 );
+ return format.format( getRate() ) + "%";
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FloatLeg.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FloatLeg.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/FloatLeg.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+package org.hibernate.test.annotations.embedded;
+
+import java.text.NumberFormat;
+import javax.persistence.Embeddable;
+
+/**
+ * Represents floating part of Interest Rate Swap cash flows.
+ */
+@Embeddable
+public class FloatLeg extends Leg {
+
+ /**
+ * Possible values for the rate index.
+ */
+ public enum RateIndex {
+ LIBOR, EURIBOR, TIBOR}
+
+ ;
+
+ private RateIndex rateIndex;
+
+ /**
+ * Spread over the selected rate index (in basis points).
+ */
+ private double rateSpread;
+
+ public RateIndex getRateIndex() {
+ return rateIndex;
+ }
+
+ public void setRateIndex(RateIndex rateIndex) {
+ this.rateIndex = rateIndex;
+ }
+
+ public double getRateSpread() {
+ return rateSpread;
+ }
+
+ public void setRateSpread(double rateSpread) {
+ this.rateSpread = rateSpread;
+ }
+
+ public String toString() {
+ NumberFormat format = NumberFormat.getNumberInstance();
+ format.setMinimumFractionDigits( 1 );
+ format.setMaximumFractionDigits( 1 );
+ return "[" + getRateIndex().toString() + "+" + format.format(
getRateSpread() ) + "]";
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/InternetProvider.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/InternetProvider.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/InternetProvider.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: InternetProvider.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class InternetProvider {
+ private Integer id;
+ private String brandName;
+ private LegalStructure owner;
+
+ public String getBrandName() {
+ return brandName;
+ }
+
+ public void setBrandName(String brandName) {
+ this.brandName = brandName;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public LegalStructure getOwner() {
+ return owner;
+ }
+
+ public void setOwner(LegalStructure owner) {
+ this.owner = owner;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Leg.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Leg.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Leg.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * Represents a leg of a vanilla interest rate swap.
+ */
+@MappedSuperclass
+public class Leg {
+ /**
+ * Possible values of the payment frequency field.
+ */
+ public enum Frequency {
+ ANNUALY, SEMIANNUALLY, QUARTERLY, MONTHLY }
+
+ ;
+
+ /**
+ * Shows how frequent payments according to this leg should be made.
+ */
+ private Frequency paymentFrequency;
+
+ public Frequency getPaymentFrequency() {
+ return paymentFrequency;
+ }
+
+ public void setPaymentFrequency(Frequency paymentFrequency) {
+ this.paymentFrequency = paymentFrequency;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/LegalStructure.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/LegalStructure.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/LegalStructure.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,66 @@
+//$Id: LegalStructure.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class LegalStructure {
+ private String name;
+ private String country;
+ private CorpType corporationType;
+ private Nationality origin;
+ private Set<Manager> topManagement = new HashSet<Manager>();
+
+ @ManyToOne
+ @JoinColumn(name = "CORP_ID")
+ public CorpType getCorporationType() {
+ return corporationType;
+ }
+
+ public void setCorporationType(CorpType corporationType) {
+ this.corporationType = corporationType;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "origin_fk")
+ public Nationality getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(Nationality origin) {
+ this.origin = origin;
+ }
+
+ @OneToMany(mappedBy = "employer")
+ public Set<Manager> getTopManagement() {
+ return topManagement;
+ }
+
+ public void setTopManagement(Set<Manager> topManagement) {
+ this.topManagement = topManagement;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Manager.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Manager.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Manager.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: Manager.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Manager {
+ private Integer id;
+ private String name;
+ private InternetProvider employer;
+
+ @ManyToOne
+ public InternetProvider getEmployer() {
+ return employer;
+ }
+
+ public void setEmployer(InternetProvider employer) {
+ this.employer = employer;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Nationality.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Nationality.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Nationality.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Nationality.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Nationality {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/NotonialDeal.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/NotonialDeal.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/NotonialDeal.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,30 @@
+//$Id: NotonialDeal.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@AttributeOverrides(value = {
+@AttributeOverride(name = "swap.tenor", column = @Column(name =
"TENOR")), //should be ovvriden by deal
+@AttributeOverride(name = "id", column = @Column(name =
"NOTONIALDEAL_ID"))
+ })
+@MappedSuperclass
+public class NotonialDeal extends Deal {
+ /**
+ * Notional amount of both IRSs.
+ */
+ private double notional;
+
+ public double getNotional() {
+ return notional;
+ }
+
+ public void setNotional(double notional) {
+ this.notional = notional;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Person.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Person.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Person.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Person.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "PersonEmbed")
+public class Person implements Serializable {
+ @Id
+ @GeneratedValue
+ Integer id;
+
+ String name;
+
+ @Embedded
+ Address address;
+
+ @Embedded
+ @AttributeOverrides({
+ @AttributeOverride(name = "iso2", column = @Column(name =
"bornIso2")),
+ @AttributeOverride(name = "name", column = @Column(name =
"bornCountryName"))
+ })
+ Country bornIn;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticle.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticle.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticle.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: RegionalArticle.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * A regional article is typically a bad design, it keep the country iso2 and a business
key as
+ * (composite) primary key
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class RegionalArticle implements Serializable {
+ private RegionalArticlePk pk;
+ private String name;
+
+ @Id
+ public RegionalArticlePk getPk() {
+ return pk;
+ }
+
+ public void setPk(RegionalArticlePk pk) {
+ this.pk = pk;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int hashCode() {
+ //a NPE can occurs, but I don't expect hashcode to be used before pk is set
+ return getPk().hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //a NPE can occurs, but I don't expect equals to be used before pk is set
+ if ( obj != null && obj instanceof RegionalArticle ) {
+ return getPk().equals( ( (RegionalArticle) obj ).getPk() );
+ }
+ else {
+ return false;
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticlePk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticlePk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/RegionalArticlePk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: RegionalArticlePk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * Regional article pk
+ *
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+@AccessType("field")
+public class RegionalArticlePk implements Serializable {
+ /**
+ * country iso2 code
+ */
+ public String iso2;
+ public String localUniqueKey;
+
+ public int hashCode() {
+ //this implem sucks
+ return ( iso2 + localUniqueKey ).hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //iso2 and localUniqueKey are expected to be set in this implem
+ if ( obj != null && obj instanceof RegionalArticlePk ) {
+ RegionalArticlePk other = (RegionalArticlePk) obj;
+ return iso2.equals( other.iso2 ) && localUniqueKey.equals(
other.localUniqueKey );
+ }
+ else {
+ return false;
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/SpreadDeal.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/SpreadDeal.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/SpreadDeal.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+
+/**
+ * Represents a "curve spread" deal that consists of
+ * two Interest Rate Swaps with different tenors (short and long).
+ * For simplicity, tenors are not considered here.
+ */
+@Entity
+@AttributeOverrides(value = {
+@AttributeOverride(name = "swap.tenor", column = @Column(name =
"MEDIUM_TENOR")),
+@AttributeOverride(name = "swap.fixedLeg.paymentFrequency", column =
@Column(name = "MEDIUM_FIXED_FREQUENCY")),
+@AttributeOverride(name = "swap.fixedLeg.rate", column = @Column(name =
"MEDIUM_FIXED_RATE")),
+@AttributeOverride(name = "swap.floatLeg.paymentFrequency", column =
@Column(name = "MEDIUM_FLOAT_FREQUENCY")),
+@AttributeOverride(name = "swap.floatLeg.rateIndex", column = @Column(name =
"MEDIUM_FLOAT_RATEINDEX")),
+@AttributeOverride(name = "swap.floatLeg.rateSpread", column = @Column(name =
"MEDIUM_FLOAT_RATESPREAD"))
+ })
+public class SpreadDeal extends NotonialDeal {
+
+ /**
+ * Swap with the tenor.
+ */
+ private Swap longSwap;
+
+ @Embedded
+ public Swap getLongSwap() {
+ return longSwap;
+ }
+
+ public void setLongSwap(Swap swap) {
+ this.longSwap = swap;
+ }
+
+
+ /**
+ * Swap with the longer tenor.
+ */
+ private Swap shortSwap;
+
+
+ @Embedded
+ @AttributeOverrides(value = {
+ @AttributeOverride(name = "tenor", column = @Column(name =
"SHORT_TENOR")),
+ @AttributeOverride(name = "fixedLeg.paymentFrequency", column = @Column(name =
"SHORT_FIXED_FREQUENCY")),
+ @AttributeOverride(name = "fixedLeg.rate", column = @Column(name =
"SHORT_FIXED_RATE")),
+ @AttributeOverride(name = "floatLeg.paymentFrequency", column = @Column(name =
"SHORT_FLOAT_FREQUENCY")),
+ @AttributeOverride(name = "floatLeg.rateIndex", column = @Column(name =
"SHORT_FLOAT_RATEINDEX")),
+ @AttributeOverride(name = "floatLeg.rateSpread", column = @Column(name =
"SHORT_FLOAT_RATESPREAD"))
+ })
+ public Swap getShortSwap() {
+ return shortSwap;
+ }
+
+ public void setShortSwap(Swap shortSwap) {
+ this.shortSwap = shortSwap;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Summary.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Summary.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Summary.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+//$Id: Summary.java 15056 2008-08-13 18:15:05Z epbernard $
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Embeddable;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Parent;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Summary {
+ private int size;
+ private String text;
+ private Book summarizedBook;
+
+ @Column(name="summary_size")
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ @Parent
+ public Book getSummarizedBook() {
+ return summarizedBook;
+ }
+
+ public void setSummarizedBook(Book summarizedBook) {
+ this.summarizedBook = summarizedBook;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Swap.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Swap.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/Swap.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+
+/**
+ * Interest Rate Swap with Tenor. Used here to compose
+ * a swap spread deal.
+ */
+@Embeddable
+public class Swap {
+
+ /**
+ * Tenor (duration) of the swap (in years).
+ */
+ private int tenor;
+
+ public int getTenor() {
+ return tenor;
+ }
+
+ public void setTenor(int tenor) {
+ this.tenor = tenor;
+ }
+
+ /**
+ * Fixed leg (cash flows with the fixed rate).
+ */
+ private FixedLeg fixedLeg;
+
+ /**
+ * Floating leg (cash flows bound to a financial index).
+ */
+ private FloatLeg floatLeg;
+
+ @Embedded
+ // We retain this annotation to test the precedence of @AttributeOverride
+ // Outermost override annotation should win
+ @AttributeOverride(name = "paymentFrequency", column = @Column(name =
"FIXED_FREQENCY"))
+ public FixedLeg getFixedLeg() {
+ return fixedLeg;
+ }
+
+ public void setFixedLeg(FixedLeg fixedLeg) {
+ this.fixedLeg = fixedLeg;
+ }
+
+ @Embedded
+ public FloatLeg getFloatLeg() {
+ return floatLeg;
+ }
+
+ public void setFloatLeg(FloatLeg floatLeg) {
+ this.floatLeg = floatLeg;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/VanillaSwap.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/VanillaSwap.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/embedded/VanillaSwap.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,77 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * Represents an Interest Rate Swap.
+ */
+@Entity
+public class VanillaSwap {
+
+ /**
+ * Possible values for the currency field.
+ */
+ public enum Currency {
+ USD, GBP, EUR, JPY }
+
+ /**
+ * Identifier of the Interest Rate Swap
+ */
+ private String instrumentId;
+
+ /**
+ * Currency of the swap (and of both legs).
+ */
+ private Currency currency;
+
+ /**
+ * Fixed leg (cash flows with the fixed rate).
+ */
+ private FixedLeg fixedLeg;
+
+ /**
+ * Floating leg (cash flows bound to a financial index).
+ */
+ private FloatLeg floatLeg;
+
+ @Embedded
+ @AttributeOverride(name = "paymentFrequency", column = @Column(name =
"FIXED_FREQENCY"))
+ public FixedLeg getFixedLeg() {
+ return fixedLeg;
+ }
+
+ public void setFixedLeg(FixedLeg fixedLeg) {
+ this.fixedLeg = fixedLeg;
+ }
+
+ @Embedded
+ @AttributeOverride(name = "paymentFrequency", column = @Column(name =
"FLOAT_FREQUENCY"))
+ public FloatLeg getFloatLeg() {
+ return floatLeg;
+ }
+
+ public void setFloatLeg(FloatLeg floatLeg) {
+ this.floatLeg = floatLeg;
+ }
+
+ public Currency getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(Currency currency) {
+ this.currency = currency;
+ }
+
+ @Id
+ public String getInstrumentId() {
+ return instrumentId;
+ }
+
+ public void setInstrumentId(String instrumentId) {
+ this.instrumentId = instrumentId;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Address.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Address.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Address.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: Address.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Has a serializable class as a property
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "serial_address")
+public class Address {
+ private Integer id;
+ private String city;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public Country getCountry() {
+ return country;
+ }
+
+ public void setCountry(Country country) {
+ this.country = country;
+ }
+
+ private Country country;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,357 @@
+//$Id: BasicHibernateAnnotationsTest.java 17798 2009-10-19 15:48:57Z stliu $
+package org.hibernate.test.annotations.entity;
+
+import java.math.BigDecimal;
+import java.util.Currency;
+import java.util.Date;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BasicHibernateAnnotationsTest extends TestCase {
+
+ public void testEntity() throws Exception {
+ if( !getDialect().supportsExpectedLobUsagePattern() ){
+ return;
+ }
+ Forest forest = new Forest();
+ forest.setName( "Fontainebleau" );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( forest );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ forest = (Forest) s.get( Forest.class, forest.getId() );
+ assertNotNull( forest );
+ forest.setName( "Fontainebleau" );
+ //should not execute SQL update
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ forest = (Forest) s.get( Forest.class, forest.getId() );
+ assertNotNull( forest );
+ forest.setLength( 23 );
+ //should execute dynamic SQL update
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete( s.get( Forest.class, forest.getId() ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testVersioning() throws Exception {
+ if( !getDialect().supportsExpectedLobUsagePattern() ){
+ return;
+ }
+ Forest forest = new Forest();
+ forest.setName( "Fontainebleau" );
+ forest.setLength( 33 );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( forest );
+ tx.commit();
+ s.close();
+
+ Session parallelSession = openSession();
+ Transaction parallelTx = parallelSession.beginTransaction();
+ s = openSession();
+ tx = s.beginTransaction();
+
+ forest = (Forest) parallelSession.get( Forest.class, forest.getId() );
+ Forest reloadedForest = (Forest) s.get( Forest.class, forest.getId() );
+ reloadedForest.setLength( 11 );
+ assertNotSame( forest, reloadedForest );
+ tx.commit();
+ s.close();
+
+ forest.setLength( 22 );
+ try {
+ parallelTx.commit();
+ fail( "All optimistic locking should have make it fail" );
+ }
+ catch (HibernateException e) {
+ if ( parallelTx != null ) parallelTx.rollback();
+ }
+ finally {
+ parallelSession.close();
+ }
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete( s.get( Forest.class, forest.getId() ) );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testPolymorphism() throws Exception {
+ if( !getDialect().supportsExpectedLobUsagePattern() ){
+ return;
+ }
+ Forest forest = new Forest();
+ forest.setName( "Fontainebleau" );
+ forest.setLength( 33 );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( forest );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query query = s.createQuery( "from java.lang.Object" );
+ assertEquals( 0, query.list().size() );
+ query = s.createQuery( "from Forest" );
+ assertTrue( 0 < query.list().size() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testType() throws Exception {
+ if( !getDialect().supportsExpectedLobUsagePattern() ){
+ return;
+ }
+ Forest f = new Forest();
+ f.setName( "Broceliande" );
+ String description = "C'est une enorme foret enchantee ou vivais Merlin et
toute la clique";
+ f.setLongDescription( description );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( f );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ f = (Forest) s.get( Forest.class, f.getId() );
+ assertNotNull( f );
+ assertEquals( description, f.getLongDescription() );
+ s.delete( f );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testNonLazy() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Forest f = new Forest();
+ Tree t = new Tree();
+ t.setName( "Basic one" );
+ s.persist( f );
+ s.persist( t );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ f = (Forest) s.load( Forest.class, f.getId() );
+ t = (Tree) s.load( Tree.class, t.getId() );
+ assertFalse( "Default should be lazy", Hibernate.isInitialized( f ) );
+ assertTrue( "Tree is not lazy", Hibernate.isInitialized( t ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCache() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ ZipCode zc = new ZipCode();
+ zc.code = "92400";
+ s.persist( zc );
+ tx.commit();
+ s.close();
+ getSessions().getStatistics().clear();
+ getSessions().getStatistics().setStatisticsEnabled( true );
+ getSessions().evict( ZipCode.class );
+ s = openSession();
+ tx = s.beginTransaction();
+ s.get( ZipCode.class, zc.code );
+ assertEquals( 1, getSessions().getStatistics().getSecondLevelCachePutCount() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.get( ZipCode.class, zc.code );
+ assertEquals( 1, getSessions().getStatistics().getSecondLevelCacheHitCount() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testFilter() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.createQuery( "delete Forest" ).executeUpdate();
+ Forest f1 = new Forest();
+ f1.setLength( 2 );
+ s.persist( f1 );
+ Forest f2 = new Forest();
+ f2.setLength( 20 );
+ s.persist( f2 );
+ Forest f3 = new Forest();
+ f3.setLength( 200 );
+ s.persist( f3 );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ s.enableFilter( "betweenLength" ).setParameter( "minLength", 5
).setParameter( "maxLength", 50 );
+ long count = ( (Long) s.createQuery( "select count(*) from Forest"
).iterate().next() ).intValue();
+ assertEquals( 1, count );
+ s.disableFilter( "betweenLength" );
+ s.enableFilter( "minLength" ).setParameter( "minLength", 5 );
+ count = ( (Long) s.createQuery( "select count(*) from Forest"
).iterate().next() ).longValue();
+ assertEquals( 2l, count );
+ s.disableFilter( "minLength" );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testParameterizedType() throws Exception {
+ if( !getDialect().supportsExpectedLobUsagePattern() ){
+ return;
+ }
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Forest f = new Forest();
+ f.setSmallText( "ThisIsASmallText" );
+ f.setBigText( "ThisIsABigText" );
+ s.persist( f );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Forest f2 = (Forest) s.get( Forest.class, f.getId() );
+ assertEquals( f.getSmallText().toLowerCase(), f2.getSmallText() );
+ assertEquals( f.getBigText().toUpperCase(), f2.getBigText() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSerialized() throws Exception {
+ if( !getDialect().supportsExpectedLobUsagePattern() ){
+ return;
+ }
+ Forest forest = new Forest();
+ forest.setName( "Shire" );
+ Country country = new Country();
+ country.setName( "Middle Earth" );
+ forest.setCountry( country );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( forest );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ forest = (Forest) s.get( Forest.class, forest.getId() );
+ assertNotNull( forest );
+ assertNotNull( forest.getCountry() );
+ assertEquals( country.getName(), forest.getCountry().getName() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositeType() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Ransom r = new Ransom();
+ r.setKidnapperName( "Se7en" );
+ r.setDate( new Date() );
+ MonetaryAmount amount = new MonetaryAmount(
+ new BigDecimal( 100000 ),
+ Currency.getInstance( "EUR" )
+ );
+ r.setAmount( amount );
+ s.persist( r );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ r = (Ransom) s.get( Ransom.class, r.getId() );
+ assertNotNull( r );
+ assertNotNull( r.getAmount() );
+ assertTrue( 0 == new BigDecimal( 100000 ).compareTo( r.getAmount().getAmount() ) );
+ assertEquals( Currency.getInstance( "EUR" ), r.getAmount().getCurrency() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testFormula() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ org.hibernate.test.annotations.entity.Flight airFrance = new Flight();
+ airFrance.setId( new Long( 747 ) );
+ airFrance.setMaxAltitude( 10000 );
+ s.persist( airFrance );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ airFrance = (Flight) s.get( Flight.class, airFrance.getId() );
+ assertNotNull( airFrance );
+ assertEquals( 10000000, airFrance.getMaxAltitudeInMilimeter() );
+ s.delete( airFrance );
+ tx.commit();
+ s.close();
+ }
+
+ public BasicHibernateAnnotationsTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Forest.class,
+ Tree.class,
+ Ransom.class,
+ ZipCode.class,
+ Flight.class
+ };
+ }
+
+ protected String[] getAnnotatedPackages() {
+ return new String[]{
+ "org.hibernate.test.annotations.entity"
+ };
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Bid.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Bid.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Bid.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,63 @@
+//$Id: Bid.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Bid {
+ private Integer id;
+ private String description;
+ private Starred note;
+ private Starred editorsNote;
+ private Boolean approved;
+
+ @Enumerated(EnumType.STRING)
+ //@Column(columnDefinition = "VARCHAR(10)")
+ public Starred getEditorsNote() {
+ return editorsNote;
+ }
+
+ public void setEditorsNote(Starred editorsNote) {
+ this.editorsNote = editorsNote;
+ }
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Starred getNote() {
+ return note;
+ }
+
+ public void setNote(Starred note) {
+ this.note = note;
+ }
+
+ public Boolean getApproved() {
+ return approved;
+ }
+
+ public void setApproved(Boolean approved) {
+ this.approved = approved;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CasterStringType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CasterStringType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CasterStringType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,90 @@
+//$Id: CasterStringType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Properties;
+
+import org.hibernate.HibernateException;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+/**
+ * Sample of parameter type
+ *
+ * @author Emmanuel Bernard
+ */
+public class CasterStringType implements UserType, ParameterizedType {
+ private static final String CAST = "cast";
+ private Properties parameters;
+
+ public int[] sqlTypes() {
+ return new int[]{Types.VARCHAR};
+ }
+
+ public Class returnedClass() {
+ return String.class;
+ }
+
+ public boolean equals(Object x, Object y) throws HibernateException {
+ return ( x == y ) || ( x != null && x.equals( y ) );
+ }
+
+ public int hashCode(Object x) throws HibernateException {
+ return x.hashCode();
+ }
+
+ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws
HibernateException, SQLException {
+ String result = rs.getString( names[0] );
+ if ( rs.wasNull() ) return null;
+ if ( parameters.getProperty( CAST ).equals( "lower" ) ) {
+ return result.toLowerCase();
+ }
+ else {
+ return result.toUpperCase();
+ }
+ }
+
+ public void nullSafeSet(PreparedStatement st, Object value, int index) throws
HibernateException, SQLException {
+ if ( value == null ) {
+ st.setNull( index, sqlTypes()[0] );
+ }
+ else {
+ String string = (String) value;
+ if ( parameters.getProperty( CAST ).equals( "lower" ) ) {
+ string = string.toLowerCase();
+ }
+ else {
+ string = string.toUpperCase();
+ }
+ st.setString( index, string );
+ }
+ }
+
+ public Object deepCopy(Object value) throws HibernateException {
+ return value;
+ }
+
+ public boolean isMutable() {
+ return false;
+ }
+
+ public Serializable disassemble(Object value) throws HibernateException {
+ return (Serializable) value;
+ }
+
+ public Object assemble(Serializable cached, Object owner) throws HibernateException {
+ return cached;
+ }
+
+ public Object replace(Object original, Object target, Object owner) throws
HibernateException {
+ return original;
+ }
+
+ public void setParameterValues(Properties parameters) {
+ this.parameters = parameters;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CommunityBid.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CommunityBid.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/CommunityBid.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: CommunityBid.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CommunityBid extends Bid {
+ private Starred communityNote;
+
+ public Starred getCommunityNote() {
+ return communityNote;
+ }
+
+ public void setCommunityNote(Starred communityNote) {
+ this.communityNote = communityNote;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Country.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Country.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Country.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: Country.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+
+/**
+ * Serializable object to be serialized in DB as is
+ *
+ * @author Emmanuel Bernard
+ */
+public class Country implements Serializable {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Flight.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Flight.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Flight.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: Flight.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+@Table(name = "Formula_flight")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+ Long id;
+ long maxAltitudeInMilimeter;
+ long maxAltitude;
+
+ @Id
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+
+ public long getMaxAltitude() {
+ return maxAltitude;
+ }
+
+ public void setMaxAltitude(long maxAltitude) {
+ this.maxAltitude = maxAltitude;
+ }
+
+ @Formula("maxAltitude * 1000")
+ public long getMaxAltitudeInMilimeter() {
+ return maxAltitudeInMilimeter;
+ }
+
+ public void setMaxAltitudeInMilimeter(long maxAltitudeInMilimeter) {
+ this.maxAltitudeInMilimeter = maxAltitudeInMilimeter;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Forest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Forest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Forest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,113 @@
+//$Id: Forest.java 17791 2009-10-19 13:16:08Z stliu $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.Filters;
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.OptimisticLock;
+import org.hibernate.annotations.OptimisticLockType;
+import org.hibernate.annotations.ParamDef;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.PolymorphismType;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.Where;
+
+/**
+ * Use hibernate specific annotations
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@BatchSize(size = 5)
+(a)org.hibernate.annotations.Entity(
+ selectBeforeUpdate = true,
+ dynamicInsert = true, dynamicUpdate = true,
+ optimisticLock = OptimisticLockType.ALL,
+ polymorphism = PolymorphismType.EXPLICIT)
+@Where(clause = "1=1")
+@FilterDef(name = "minLength", parameters = {@ParamDef(name =
"minLength", type = "integer")})
+@Filters({
+@Filter(name = "betweenLength"),
+@Filter(name = "minLength", condition = ":minLength <= length")
+ })
+(a)org.hibernate.annotations.Table(appliesTo = "Forest",
+ indexes = {@Index(name = "idx", columnNames = {"name",
"length"})})
+public class Forest {
+ private Integer id;
+ private String name;
+ private long length;
+ private String longDescription;
+ private String smallText;
+ private String bigText;
+ private Country country;
+
+ @OptimisticLock(excluded=true)
+ @Type(type = "text")
+ public String getLongDescription() {
+ return longDescription;
+ }
+
+ public void setLongDescription(String longDescription) {
+ this.longDescription = longDescription;
+ }
+
+ public long getLength() {
+ return length;
+ }
+
+ public void setLength(long length) {
+ this.length = length;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Type(type = "caster")
+ public String getSmallText() {
+ return smallText;
+ }
+
+ @Type(type = "caster", parameters = {@Parameter(name = "cast", value
= "upper")})
+ public String getBigText() {
+ return bigText;
+ }
+
+ public void setSmallText(String smallText) {
+ this.smallText = smallText;
+ }
+
+ public void setBigText(String bigText) {
+ this.bigText = bigText;
+ }
+
+ @Lob
+ public Country getCountry() {
+ return country;
+ }
+
+ public void setCountry(Country country) {
+ this.country = country;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Java5FeaturesTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Java5FeaturesTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Java5FeaturesTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,125 @@
+//$Id: Java5FeaturesTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Java5FeaturesTest extends TestCase {
+ public void testInterface() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Race r = new Race();
+ r.setId( new Integer( 1 ) );
+ r.setLength( new Long( 3 ) );
+ s.persist( r );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ r = (Race) s.get( Race.class, r.getId() );
+ assertEquals( new Long( 3 ), r.getLength() );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testEnums() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ CommunityBid communityBid = new CommunityBid();
+ communityBid.setId( new Integer( 2 ) );
+ communityBid.setCommunityNote( Starred.OK );
+ Bid bid = new Bid();
+ bid.setId( new Integer( 1 ) );
+ bid.setDescription( "My best one" );
+ bid.setNote( Starred.OK );
+ bid.setEditorsNote( Starred.GOOD );
+ s.persist( bid );
+ s.persist( communityBid );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ //bid = (Bid) s.get( Bid.class, bid.getId() );
+ bid = (Bid)s.createQuery( "select b from Bid b where b.note = " +
+ Starred.class.getName() + ".OK and b.editorsNote = " +
+ Starred.class.getName() + ".GOOD and b.id = :id")
+ .setParameter( "id", bid.getId() ).uniqueResult();
+ //testing constant value
+ assertEquals( Starred.OK, bid.getNote() );
+ assertEquals( Starred.GOOD, bid.getEditorsNote() );
+ bid = (Bid)s.createQuery( "select b from Bid b where b.note = :note" +
+ " and b.editorsNote = :editorNote " +
+ " and b.id = :id")
+ .setParameter( "id", bid.getId() )
+ .setParameter( "note", Starred.OK )
+ .setParameter( "editorNote", Starred.GOOD )
+ .uniqueResult();
+ //testing constant value
+ assertEquals( Starred.OK, bid.getNote() );
+ assertEquals( Starred.GOOD, bid.getEditorsNote() );
+ bid.setNote( null );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ bid = (Bid) s.get( Bid.class, bid.getId() );
+ communityBid = (CommunityBid) s.get( CommunityBid.class, communityBid.getId() );
+ assertNull( bid.getNote() );
+ assertEquals( Starred.OK, communityBid.getCommunityNote() );
+ s.delete( bid );
+ s.clear();
+ communityBid = (CommunityBid) s.createSQLQuery( "select {b.*} from Bid b where
b.id = ?" )
+ .addEntity( "b", CommunityBid.class )
+ .setInteger( 0, communityBid.getId() ).uniqueResult();
+ assertEquals( Starred.OK, communityBid.getCommunityNote() );
+ s.delete( communityBid );
+ tx.commit();
+ s.close();
+ }
+
+ public void testAutoboxing() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Bid bid = new Bid();
+ bid.setId( new Integer( 2 ) );
+ bid.setDescription( "My best one" );
+ bid.setNote( Starred.OK );
+ bid.setEditorsNote( Starred.GOOD );
+ bid.setApproved( null );
+ s.persist( bid );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ bid = (Bid) s.get( Bid.class, bid.getId() );
+ assertEquals( null, bid.getApproved() );
+ s.delete( bid );
+ tx.commit();
+ s.close();
+ }
+
+ public Java5FeaturesTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Race.class,
+ Bid.class,
+ CommunityBid.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Length.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Length.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Length.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,9 @@
+//$Id: Length.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Length<Type> {
+ Type getLength();
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmount.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmount.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmount.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,36 @@
+//$Id: MonetaryAmount.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Currency;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MonetaryAmount implements Serializable {
+
+ private BigDecimal amount;
+ private Currency currency;
+
+ public MonetaryAmount(BigDecimal amount, Currency currency) {
+ this.amount = amount;
+ this.currency = currency;
+ }
+
+ public BigDecimal getAmount() {
+ return amount;
+ }
+
+ public void setAmount(BigDecimal amount) {
+ this.amount = amount;
+ }
+
+ public Currency getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(Currency currency) {
+ this.currency = currency;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,106 @@
+//$Id: MonetaryAmountUserType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Currency;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.type.Type;
+import org.hibernate.usertype.CompositeUserType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MonetaryAmountUserType implements CompositeUserType {
+
+ public String[] getPropertyNames() {
+ return new String[]{"amount", "currency"};
+ }
+
+ public Type[] getPropertyTypes() {
+ return new Type[]{Hibernate.BIG_DECIMAL, Hibernate.CURRENCY};
+ }
+
+ public Object getPropertyValue(Object component, int property) throws HibernateException
{
+ MonetaryAmount ma = (MonetaryAmount) component;
+ return property == 0 ? (Object) ma.getAmount() : (Object) ma.getCurrency();
+ }
+
+ public void setPropertyValue(Object component, int property, Object value)
+ throws HibernateException {
+ MonetaryAmount ma = (MonetaryAmount) component;
+ if ( property == 0 ) {
+ ma.setAmount( (BigDecimal) value );
+ }
+ else {
+ ma.setCurrency( (Currency) value );
+ }
+ }
+
+ public Class returnedClass() {
+ return MonetaryAmount.class;
+ }
+
+ public boolean equals(Object x, Object y) throws HibernateException {
+ if ( x == y ) return true;
+ if ( x == null || y == null ) return false;
+ MonetaryAmount mx = (MonetaryAmount) x;
+ MonetaryAmount my = (MonetaryAmount) y;
+ return mx.getAmount().equals( my.getAmount() ) &&
+ mx.getCurrency().equals( my.getCurrency() );
+ }
+
+ public int hashCode(Object x) throws HibernateException {
+ return ( (MonetaryAmount) x ).getAmount().hashCode();
+ }
+
+ public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session,
Object owner)
+ throws HibernateException, SQLException {
+ BigDecimal amt = (BigDecimal) Hibernate.BIG_DECIMAL.nullSafeGet( rs, names[0] );
+ Currency cur = (Currency) Hibernate.CURRENCY.nullSafeGet( rs, names[1] );
+ if ( amt == null ) return null;
+ return new MonetaryAmount( amt, cur );
+ }
+
+ public void nullSafeSet(
+ PreparedStatement st, Object value, int index,
+ SessionImplementor session
+ ) throws HibernateException, SQLException {
+ MonetaryAmount ma = (MonetaryAmount) value;
+ BigDecimal amt = ma == null ? null : ma.getAmount();
+ Currency cur = ma == null ? null : ma.getCurrency();
+ Hibernate.BIG_DECIMAL.nullSafeSet( st, amt, index );
+ Hibernate.CURRENCY.nullSafeSet( st, cur, index + 1 );
+ }
+
+ public Object deepCopy(Object value) throws HibernateException {
+ MonetaryAmount ma = (MonetaryAmount) value;
+ return new MonetaryAmount( ma.getAmount(), ma.getCurrency() );
+ }
+
+ public boolean isMutable() {
+ return true;
+ }
+
+ public Serializable disassemble(Object value, SessionImplementor session)
+ throws HibernateException {
+ return (Serializable) deepCopy( value );
+ }
+
+ public Object assemble(Serializable cached, SessionImplementor session, Object owner)
+ throws HibernateException {
+ return deepCopy( cached );
+ }
+
+ public Object replace(Object original, Object target, SessionImplementor session, Object
owner)
+ throws HibernateException {
+ return deepCopy( original ); //TODO: improve
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: PropertyDefaultMappingsTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PropertyDefaultMappingsTest extends TestCase {
+ public PropertyDefaultMappingsTest(String x) {
+ super( x );
+ }
+
+ public void testSerializableObject() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Country c = new Country();
+ c.setName( "France" );
+ Address a = new Address();
+ a.setCity( "Paris" );
+ a.setCountry( c );
+ s.persist( a );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Address reloadedAddress = (Address) s.get( Address.class, a.getId() );
+ assertNotNull( reloadedAddress );
+ assertNotNull( reloadedAddress.getCountry() );
+ assertEquals( a.getCountry().getName(), reloadedAddress.getCountry().getName() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testTransientField() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ WashingMachine wm = new WashingMachine();
+ wm.setActive( true );
+ s.persist( wm );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ wm = (WashingMachine) s.get( WashingMachine.class, wm.getId() );
+ assertFalse( "transient should not be persistent", wm.isActive() );
+ s.delete( wm );
+ tx.commit();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Address.class,
+ WashingMachine.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Race.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Race.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Race.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: Race.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Race implements Length<Long> {
+ private Long length;
+ private Integer id;
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Long getLength() {
+ return length;
+ }
+
+ public void setLength(Long length) {
+ this.length = length;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Ransom.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Ransom.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Ransom.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,61 @@
+//$Id: Ransom.java 15049 2008-08-13 15:32:32Z epbernard $
+package org.hibernate.test.annotations.entity;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Columns;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Ransom {
+ private Integer id;
+ private String kidnapperName;
+ private MonetaryAmount amount;
+ private Date date;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getKidnapperName() {
+ return kidnapperName;
+ }
+
+ public void setKidnapperName(String kidnapperName) {
+ this.kidnapperName = kidnapperName;
+ }
+
+ @Type(type = "org.hibernate.test.annotations.entity.MonetaryAmountUserType")
+ @Columns(columns = {
+ @Column(name = "r_amount"),
+ @Column(name = "r_currency")
+ })
+ public MonetaryAmount getAmount() {
+ return amount;
+ }
+
+ public void setAmount(MonetaryAmount amount) {
+ this.amount = amount;
+ }
+ @Column(name="ransom_date")
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Starred.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Starred.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Starred.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+package org.hibernate.test.annotations.entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Starred {
+ BAD,
+ OK,
+ GOOD
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Tree.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Tree.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/Tree.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: Tree.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Proxy;
+
+/**
+ * Non lazy entity
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Proxy(lazy = false)
+public class Tree {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/WashingMachine.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/WashingMachine.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/WashingMachine.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: WashingMachine.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class WashingMachine {
+ @Id
+ @GeneratedValue
+ private Integer id;
+ private transient boolean isActive;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public boolean isActive() {
+ return isActive;
+ }
+
+ public void setActive(boolean active) {
+ isActive = active;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/ZipCode.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/ZipCode.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/ZipCode.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+//$Id: ZipCode.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
+@Entity
+(a)org.hibernate.annotations.Entity(mutable = false)
+public class ZipCode {
+ @Id
+ public String code;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/package-info.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/package-info.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entity/package-info.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+/**
+ * Test package for metatata facilities
+ * It contains an example of filter metadata
+ */
+@FilterDefs(
+ {
+ @FilterDef(
+ name = "betweenLength",
+ defaultCondition = ":minLength <= length and :maxLength >= length",
+ parameters = {
+ @ParamDef(name = "minLength", type = "integer"),
+ @ParamDef(name = "maxLength", type = "integer")
+ }
+ )
+ }
+)
+@TypeDefs(
+ {
+ @TypeDef(
+ name = "caster",
+ typeClass = CasterStringType.class,
+ parameters = {
+ @Parameter(name = "cast", value = "lower")
+ }
+ )
+ }
+) package org.hibernate.test.annotations.entity;
+
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.FilterDefs;
+import org.hibernate.annotations.ParamDef;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.TypeDefs;
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Cellular.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Cellular.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Cellular.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,9 @@
+//$Id: Cellular.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entitynonentity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Cellular extends Phone {
+ String brand;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Communication.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Communication.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Communication.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,9 @@
+//$Id: Communication.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entitynonentity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Communication extends Interaction {
+ String species;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+//$Id: EntityNonEntityTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entitynonentity;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityNonEntityTest extends TestCase {
+ public void testMix() throws Exception {
+ GSM gsm = new GSM();
+ gsm.brand = "Sony";
+ gsm.frequency = 900;
+ gsm.isNumeric = true;
+ gsm.number = 2;
+ gsm.species = "human";
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( gsm );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ gsm = (GSM) s.get( GSM.class, gsm.id );
+ assertEquals( "top mapped superclass", 2, gsm.number );
+ assertNull( "non entity between mapped superclass and entity", gsm.species
);
+ assertTrue( "mapped superclass under entity", gsm.isNumeric );
+ assertNull( "non entity under entity", gsm.brand );
+ assertEquals( "leaf entity", 900, gsm.frequency );
+ s.delete( gsm );
+ tx.commit();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Phone.class,
+ Voice.class,
+ GSM.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/GSM.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/GSM.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/GSM.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+//$Id: GSM.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class GSM extends Cellular {
+ int frequency;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Interaction.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Interaction.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Interaction.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+//$Id: Interaction.java 15049 2008-08-13 15:32:32Z epbernard $
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Interaction {
+ @Column(name="int_nbr")
+ public int number;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Phone.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Phone.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Phone.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+//$Id: Phone.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Phone extends Voice {
+ boolean isNumeric;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Voice.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Voice.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/entitynonentity/Voice.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+//$Id: Voice.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+public class Voice extends Communication {
+ @Id
+ @GeneratedValue
+ public Integer id;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Branch.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Branch.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Branch.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: Branch.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.fetch;
+
+import java.util.Set;
+import java.util.HashSet;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToMany;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Branch {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ @OneToMany(mappedBy = "branch", fetch = FetchType.EAGER )
+ private Set<Leaf> leaves = new HashSet<Leaf>();
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Set<Leaf> getLeaves() {
+ return leaves;
+ }
+
+ public void setLeaves(Set<Leaf> leaves) {
+ this.leaves = leaves;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/FetchingTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/FetchingTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/FetchingTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,125 @@
+//$Id: FetchingTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.fetch;
+
+import java.util.Date;
+
+import org.hibernate.Hibernate;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FetchingTest extends TestCase {
+ public void testLazy() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Person p = new Person( "Gavin", "King", "JBoss Inc" );
+ Stay stay = new Stay( p, new Date(), new Date(), "A380", "Blah",
"Blah" );
+ p.addStay( stay );
+ s.persist( p );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
+ .setParameter( "name", "Gavin" ).uniqueResult();
+ assertFalse( Hibernate.isInitialized( p.getStays() ) );
+ s.delete( p );
+ tx.commit();
+ s.close();
+ }
+
+ public void testExtraLazy() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Person p = new Person( "Gavin", "King", "JBoss Inc" );
+ Stay stay = new Stay( p, new Date(), new Date(), "A380", "Blah",
"Blah" );
+ p.getOrderedStay().add( stay );
+ s.persist( p );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
+ .setParameter( "name", "Gavin" ).uniqueResult();
+ assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
+ assertEquals( 1, p.getOrderedStay().size() );
+ assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
+ assertEquals( "A380", p.getOrderedStay().get(0).getVessel() );
+ assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
+ s.delete( p );
+ tx.commit();
+ s.close();
+ }
+
+ public void testHibernateFetchingLazy() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Person p = new Person( "Gavin", "King", "JBoss Inc" );
+ Stay stay = new Stay( null, new Date(), new Date(), "A380", "Blah",
"Blah" );
+ Stay stay2 = new Stay( null, new Date(), new Date(), "A320",
"Blah", "Blah" );
+ Stay stay3 = new Stay( null, new Date(), new Date(), "A340",
"Blah", "Blah" );
+ stay.setOldPerson( p );
+ stay2.setVeryOldPerson( p );
+ stay3.setVeryOldPerson( p );
+ p.addOldStay( stay );
+ p.addVeryOldStay( stay2 );
+ p.addVeryOldStay( stay3 );
+ s.persist( p );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
+ .setParameter( "name", "Gavin" ).uniqueResult();
+ assertFalse( Hibernate.isInitialized( p.getOldStays() ) );
+ assertEquals( 1, p.getOldStays().size() );
+ assertFalse( "lazy extra is failing", Hibernate.isInitialized(
p.getOldStays() ) );
+ s.clear();
+ stay = (Stay) s.get( Stay.class, stay.getId() );
+ assertTrue( ! Hibernate.isInitialized( stay.getOldPerson() ) );
+ s.clear();
+ stay3 = (Stay) s.get( Stay.class, stay3.getId() );
+ assertTrue( "FetchMode.JOIN should overrides lazy options",
Hibernate.isInitialized( stay3.getVeryOldPerson() ) );
+ s.delete( stay3.getVeryOldPerson() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testOneToManyFetchEager() throws Exception {
+ Branch b = new Branch();
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( b );
+ s.flush();
+ Leaf l = new Leaf();
+ l.setBranch( b );
+ s.persist( l );
+ s.flush();
+
+ s.clear();
+
+ s.createCriteria( Branch.class ).list();
+
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public FetchingTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Person.class,
+ Stay.class,
+ Branch.class,
+ Leaf.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Leaf.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Leaf.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Leaf.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: Leaf.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.fetch;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Leaf {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ @ManyToOne
+ private Branch branch;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Branch getBranch() {
+ return branch;
+ }
+
+ public void setBranch(Branch branch) {
+ this.branch = branch;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Person.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Person.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Person.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,176 @@
+//$Id: Person.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.fetch;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
+import org.hibernate.annotations.IndexColumn;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "Person")
+public class Person implements Serializable {
+
+ // member declaration
+ private int id;
+ private String firstName;
+ private String lastName;
+ private String companyName;
+ private Collection<Stay> stays;
+ private Collection<Stay> oldStays;
+ private Collection<Stay> veryOldStays;
+ private List<Stay> orderedStay = new ArrayList<Stay>();
+
+ // constructors
+ public Person() {
+ }
+
+ public Person(String firstName, String lastName, String companyName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.companyName = companyName;
+ }
+
+ // properties
+ public String getCompanyName() {
+ return companyName;
+ }
+
+ public void setCompanyName(String companyName) {
+ this.companyName = companyName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ // relationships
+
+ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
"person")
+ public Collection<Stay> getStays() {
+ return this.stays;
+ }
+
+ public void setStays(List<Stay> stays) {
+ this.stays = stays;
+ }
+
+ @OneToMany(cascade=CascadeType.ALL, mappedBy = "oldPerson")
+ @LazyCollection(LazyCollectionOption.EXTRA)
+ @Fetch(FetchMode.SUBSELECT)
+ public Collection<Stay> getOldStays() {
+ return oldStays;
+ }
+
+ public void setOldStays(Collection<Stay> oldStays) {
+ this.oldStays = oldStays;
+ }
+
+ @OneToMany(cascade=CascadeType.ALL, mappedBy = "veryOldPerson")
+ @Fetch(FetchMode.SELECT)
+ public Collection<Stay> getVeryOldStays() {
+ return veryOldStays;
+ }
+
+ public void setVeryOldStays(Collection<Stay> veryOldStays) {
+ this.veryOldStays = veryOldStays;
+ }
+
+ @OneToMany(cascade=CascadeType.ALL)
+ @LazyCollection(LazyCollectionOption.EXTRA)
+ @Fetch(FetchMode.SUBSELECT)
+ @IndexColumn(name="orderedStayIndex")
+ public List<Stay> getOrderedStay() {
+ return orderedStay;
+ }
+
+ public void setOrderedStay(List<Stay> orderedStay) {
+ this.orderedStay = orderedStay;
+ }
+
+
+ // business logic
+ public void addStay(Date startDate, Date endDate, String vessel, String authoriser,
String comments) {
+ Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
+ addStay( stay );
+ }
+
+ public void addStay(Stay stay) {
+ Collection<Stay> stays = getStays();
+ if ( stays == null ) {
+ stays = new ArrayList<Stay>();
+ }
+ stays.add( stay );
+
+ this.stays = stays;
+ }
+
+ public void addOldStay(Date startDate, Date endDate, String vessel, String authoriser,
String comments) {
+ Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
+ addOldStay( stay );
+ }
+
+ public void addOldStay(Stay stay) {
+ Collection<Stay> stays = getOldStays();
+ if ( stays == null ) {
+ stays = new ArrayList<Stay>();
+ }
+ stays.add( stay );
+
+ this.oldStays = stays;
+ }
+
+ public void addVeryOldStay(Date startDate, Date endDate, String vessel, String
authoriser, String comments) {
+ Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
+ addVeryOldStay( stay );
+ }
+
+ public void addVeryOldStay(Stay stay) {
+ Collection<Stay> stays = getVeryOldStays();
+ if ( stays == null ) {
+ stays = new ArrayList<Stay>();
+ }
+ stays.add( stay );
+
+ this.veryOldStays = stays;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Stay.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Stay.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fetch/Stay.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,143 @@
+//$Id: Stay.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.fetch;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.LazyToOne;
+import org.hibernate.annotations.LazyToOneOption;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "Stay")
+public class Stay implements Serializable {
+
+ // member declaration
+ private int id;
+ private Person person;
+ private Person oldPerson;
+ private Person veryOldPerson;
+ private Date startDate;
+ private Date endDate;
+ private String vessel;
+ private String authoriser;
+ private String comments;
+
+
+ // constructors
+ public Stay() {
+ }
+
+ public Stay(int id) {
+ this.id = id;
+ }
+
+ public Stay(Person person, Date startDate, Date endDate, String vessel, String
authoriser, String comments) {
+ this.authoriser = authoriser;
+ this.endDate = endDate;
+ this.person = person;
+ this.startDate = startDate;
+ this.vessel = vessel;
+ this.comments = comments;
+ }
+
+
+ // properties
+ public String getAuthoriser() {
+ return authoriser;
+ }
+
+ public void setAuthoriser(String authoriser) {
+ this.authoriser = authoriser;
+ }
+
+ public String getComments() {
+ return comments;
+ }
+
+ public void setComments(String comments) {
+ this.comments = comments;
+ }
+
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(Date endDate) {
+ this.endDate = endDate;
+ }
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @JoinColumn(name = "person")
+ public Person getPerson() {
+ return person;
+ }
+
+ public void setPerson(Person person) {
+ this.person = person;
+ }
+
+ @ManyToOne(cascade = CascadeType.ALL)
+ @LazyToOne(LazyToOneOption.PROXY)
+ @Fetch(FetchMode.SELECT)
+ @JoinColumn(name = "oldperson")
+ public Person getOldPerson() {
+ return oldPerson;
+ }
+
+ public void setOldPerson(Person oldPerson) {
+ this.oldPerson = oldPerson;
+ }
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @LazyToOne(LazyToOneOption.PROXY)
+ @Fetch(FetchMode.JOIN)
+ @JoinColumn(name = "veryoldperson")
+ public Person getVeryOldPerson() {
+ return veryOldPerson;
+ }
+
+ public void setVeryOldPerson(Person veryOldPerson) {
+ this.veryOldPerson = veryOldPerson;
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(Date startDate) {
+ this.startDate = startDate;
+ }
+
+ public String getVessel() {
+ return vessel;
+ }
+
+ public void setVessel(String vessel) {
+ this.vessel = vessel;
+ }
+
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+// $Id: A.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * Test entities ANN-722.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+public class A {
+ private A_PK id;
+
+ @EmbeddedId
+ public A_PK getId() {
+ return id;
+ }
+
+ public void setId(A_PK id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A_PK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A_PK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/A_PK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+// $Id: A_PK.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import java.io.Serializable;
+
+import javax.persistence.ManyToOne;
+
+/**
+ * Test entities ANN-722.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@SuppressWarnings("serial")
+public class A_PK implements Serializable {
+ public D d;
+
+ @ManyToOne
+ public D getD() {
+ return d;
+ }
+
+ public void setD(D d) {
+ this.d = d;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/B.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/B.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/B.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,28 @@
+// $Id: B.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * Test entities ANN-722.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+public class B {
+ @Id
+ private int id;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/C.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/C.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/C.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+// $Id: C.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.Entity;
+
+/**
+ * Test entities ANN-722.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+public class C extends B {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassA.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassA.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassA.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+// $Id: ClassA.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+
+/**
+ * Test entities ANN-730.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+@Table(name = "class_a")
+@Inheritance(strategy = InheritanceType.JOINED)
+public class ClassA {
+
+ private int id;
+
+ @Id
+ @Column(name = "id")
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassB.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassB.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassB.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+// $Id: ClassB.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+/**
+ * Test entities ANN-730.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+@Table(name = "class_b")
+@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
+public class ClassB extends ClassA {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassC.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassC.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassC.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+// $Id: ClassC.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+/**
+ * Test entities ANN-730.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+@Table(name = "class_c")
+@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
+public class ClassC extends ClassB {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassD.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassD.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/ClassD.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+// $Id: ClassD.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+/**
+ * Test entities ANN-730.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+@Table(name = "class_1d")
+@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
+public class ClassD extends ClassC {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+// $Id: D.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * Test entities ANN-722.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@Entity
+public class D {
+ private D_PK id;
+
+ @EmbeddedId
+ public D_PK getId() {
+ return id;
+ }
+
+ public void setId(D_PK id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D_PK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D_PK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/D_PK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+// $Id: D_PK.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import java.io.Serializable;
+
+import javax.persistence.ManyToOne;
+
+/**
+ * Test entities ANN-722.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+@SuppressWarnings("serial")
+public class D_PK implements Serializable{
+ private C c;
+
+ @ManyToOne
+ public C getC() {
+ return c;
+ }
+
+ public void setC(C c) {
+ this.c = c;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/FkCircularityTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/FkCircularityTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/fkcircularity/FkCircularityTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,67 @@
+// $Id: FkCircularityTest.java 14777 2008-06-18 17:47:30Z hardy.ferentschik $
+package org.hibernate.test.annotations.fkcircularity;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import junit.framework.TestCase;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.dialect.HSQLDialect;
+import org.hibernate.dialect.SQLServerDialect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test case for ANN-722 and ANN-730.
+ *
+ * @author Hardy Ferentschik
+ */
+public class FkCircularityTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(FkCircularityTest.class);
+
+ public void testJoinedSublcassesInPK() {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(A.class);
+ config.addAnnotatedClass(B.class);
+ config.addAnnotatedClass(C.class);
+ config.addAnnotatedClass(D.class);
+ config.buildSessionFactory();
+ String[] schema = config
+ .generateSchemaCreationScript(new SQLServerDialect());
+ for (String s : schema) {
+ log.debug(s);
+ }
+ log.debug("success");
+ } catch (Exception e) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+
+ public void testDeepJoinedSuclassesHierachy() {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(ClassA.class);
+ config.addAnnotatedClass(ClassB.class);
+ config.addAnnotatedClass(ClassC.class);
+ config.addAnnotatedClass(ClassD.class);
+ config.buildSessionFactory();
+ String[] schema = config
+ .generateSchemaCreationScript(new HSQLDialect());
+ for (String s : schema) {
+ log.debug(s);
+ }
+ log.debug("success");
+ } catch (Exception e) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Classes.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Classes.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Classes.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+package org.hibernate.test.annotations.generics;
+
+/**
+ * A test case for ANN-494.
+ *
+ * @author Edward Costello
+ * @author Paolo Perrotta
+ */
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.CollectionOfElements;
+
+public class Classes {
+
+ @Embeddable
+ public static class Edition<T> {
+ T name;
+ }
+
+ @Entity
+ public static class Book {
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ Long id;
+
+ @Embedded
+ Edition<String> edition;
+ }
+
+ @Entity
+ public static class PopularBook {
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ Long id;
+
+ @CollectionOfElements
+ Set<Edition<String>> editions = new
HashSet<Edition<String>>();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/DNA.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/DNA.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/DNA.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: DNA.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Paolo Perrotta
+ */
+@Entity
+public class DNA {
+
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Dummy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Dummy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Dummy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,36 @@
+//$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Transient;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Dummy<K> {
+
+ @Id
+ private Long id;
+
+ @Transient
+ transient private K dummyField;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public K getDummyField() {
+ return dummyField;
+ }
+
+ public void setDummyField(K dummyField) {
+ this.dummyField = dummyField;
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+package org.hibernate.test.annotations.generics;
+
+/**
+ * A test case for ANN-494.
+ *
+ * @author Edward Costello
+ * @author Paolo Perrotta
+ */
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+public class EmbeddedGenericsTest extends TestCase {
+
+ Session session;
+ Classes.Edition<String> edition;
+
+ public void setUp() throws Exception {
+ super.setUp();
+ session = openSession();
+ session.getTransaction().begin();
+ edition = new Classes.Edition<String>();
+ edition.name = "Second";
+ }
+
+ public void testWorksWithGenericEmbedded() {
+ Classes.Book b = new Classes.Book();
+ b.edition = edition;
+ persist( b );
+
+ Classes.Book retrieved = (Classes.Book)find( Classes.Book.class, b.id );
+ assertEquals( "Second", retrieved.edition.name );
+
+ clean( Classes.Book.class, b.id );
+ session.close();
+ }
+
+ public void testWorksWithGenericCollectionOfElements() {
+ Classes.PopularBook b = new Classes.PopularBook();
+ b.editions.add( edition );
+ persist( b );
+
+ Classes.PopularBook retrieved = (Classes.PopularBook)find( Classes.PopularBook.class,
b.id );
+ assertEquals( "Second", retrieved.editions.iterator().next().name );
+
+ clean( Classes.PopularBook.class, b.id );
+ session.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Classes.Book.class,
+ Classes.PopularBook.class
+ };
+ }
+
+ private void persist(Object data) {
+ session.persist( data );
+ session.getTransaction().commit();
+ session.clear();
+ }
+
+ private Object find(Class clazz, Long id) {
+ return session.get( clazz, id );
+ }
+
+ private void clean(Class<?> clazz, Long id) {
+ Transaction tx = session.beginTransaction();
+ session.delete( find( clazz, id ) );
+ tx.commit();
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Gene.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Gene.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Gene.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Paolo Perrotta
+ */
+@Entity
+public class Gene<T, STE extends Enum> {
+
+ private Integer id;
+ private STE state;
+
+ @Type(type="org.hibernate.test.annotations.generics.StateType")
+ public STE getState() {
+ return state;
+ }
+
+ public void setState(STE state) {
+ this.state = state;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToOne(targetEntity = DNA.class)
+ public T getGeneticCode() {
+ return null;
+ }
+
+ public void setGeneticCode(T gene) {
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/GenericsTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/GenericsTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/GenericsTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,63 @@
+//$Id: GenericsTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GenericsTest extends TestCase {
+ public void testManyToOneGenerics() throws Exception {
+ Paper white = new Paper();
+ white.setName( "WhiteA4" );
+ PaperType type = new PaperType();
+ type.setName( "A4" );
+ SomeGuy me = new SomeGuy();
+ white.setType( type );
+ white.setOwner( me );
+ Price price = new Price();
+ price.setAmount( new Double( 1 ) );
+ price.setCurrency( "Euro" );
+ white.setValue( price );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( type );
+ s.persist( price );
+ s.persist( me );
+ s.persist( white );
+ tx.commit();
+ //s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ white = (Paper) s.get( Paper.class, white.getId() );
+ s.delete( white.getType() );
+ s.delete( white.getOwner() );
+ s.delete( white.getValue() );
+ s.delete( white );
+ tx.commit();
+ //s.close();
+ }
+
+ @Override
+ protected void configure(Configuration cfg) {
+ cfg.setProperty( Environment.AUTO_CLOSE_SESSION, "true" );
+ super.configure( cfg );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Paper.class,
+ PaperType.class,
+ SomeGuy.class,
+ Price.class,
+ WildEntity.class,
+
+ //test at deployment only test unbound property when default field access is used
+ Dummy.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Item.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Item.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Item.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: Item.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Item<Type, Owner> extends PricedStuff {
+ private Integer id;
+ private String name;
+ private Type type;
+ private Owner owner;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+
+ @ManyToOne
+ public Owner getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Owner owner) {
+ this.owner = owner;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Paper.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Paper.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Paper.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: Paper.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Paper extends Item<PaperType, SomeGuy> {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PaperType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PaperType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PaperType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: PaperType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PaperType {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Price.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Price.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Price.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: Price.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Price {
+ private Integer id;
+ private Double amount;
+ private String currency;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Double getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Double amount) {
+ this.amount = amount;
+ }
+
+ public String getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(String currency) {
+ this.currency = currency;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PricedStuff.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PricedStuff.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/PricedStuff.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: PricedStuff.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class PricedStuff extends Stuff<Price> {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/SomeGuy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/SomeGuy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/SomeGuy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: SomeGuy.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class SomeGuy {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/State.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/State.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/State.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+//$Id: State.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum State {
+ ACTIVE,
+ DORMANT
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/StateType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/StateType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/StateType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,69 @@
+//$Id: StateType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import java.io.Serializable;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.PreparedStatement;
+import java.sql.Types;
+
+import org.hibernate.usertype.UserType;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StateType implements UserType {
+ public int[] sqlTypes() {
+ return new int[] {
+ Types.INTEGER
+ };
+ }
+
+ public Class returnedClass() {
+ return State.class;
+ }
+
+ public boolean equals(Object x, Object y) throws HibernateException {
+ return x == y;
+ }
+
+ public int hashCode(Object x) throws HibernateException {
+ return x.hashCode();
+ }
+
+ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws
HibernateException, SQLException {
+ int result = rs.getInt( names[0] );
+ if ( rs.wasNull() ) return null;
+ return State.values()[result];
+ }
+
+ public void nullSafeSet(PreparedStatement st, Object value, int index) throws
HibernateException, SQLException {
+ if (value == null) {
+ st.setNull( index, Types.INTEGER );
+ }
+ else {
+ st.setInt( index, ( (State) value ).ordinal() );
+ }
+ }
+
+ public Object deepCopy(Object value) throws HibernateException {
+ return value;
+ }
+
+ public boolean isMutable() {
+ return false;
+ }
+
+ public Serializable disassemble(Object value) throws HibernateException {
+ return (Serializable) value;
+ }
+
+ public Object assemble(Serializable cached, Object owner) throws HibernateException {
+ return cached;
+ }
+
+ public Object replace(Object original, Object target, Object owner) throws
HibernateException {
+ return original;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Stuff.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Stuff.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/Stuff.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Stuff.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Stuff<Value> {
+ private Value value;
+
+ @ManyToOne
+ public Value getValue() {
+ return value;
+ }
+
+ public void setValue(Value value) {
+ this.value = value;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+package org.hibernate.test.annotations.generics;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class UnresolvedTypeTest extends TestCase {
+
+ public void testAcceptsUnresolvedPropertyTypesIfATargetEntityIsExplicitlySet() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Gene item = new Gene();
+ s.persist( item );
+ s.flush();
+ tx.rollback();
+ s.close();
+ }
+
+ public void testAcceptsUnresolvedPropertyTypesIfATypeExplicitlySet() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Gene item = new Gene();
+ item.setState( State.DORMANT );
+ s.persist( item );
+ s.flush();
+ s.clear();
+ item = (Gene) s.get( Gene.class, item.getId() );
+ assertEquals( State.DORMANT, item.getState() );
+ tx.rollback();
+ s.close();
+ }
+
+ @Override
+ protected Class[] getMappings() {
+ return new Class[]{
+ Gene.class,
+ DNA.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/WildEntity.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/WildEntity.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/generics/WildEntity.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: WildEntity.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.generics;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class WildEntity implements Serializable {
+
+ private static final long serialVersionUID = -1171578628576139205L;
+
+ private int id;
+
+ private String property;
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ @Transient
+ public <T extends Object> T someMethod() {
+ return null;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getProperty() {
+ return property;
+ }
+
+ public void setProperty(String property) {
+ this.property = property;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Child.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Child.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Child.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+@MappedSuperclass
+public abstract class Child<P extends Parent> {
+
+ @Id Long id;
+ @ManyToOne P parent;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public P getParent() {
+ return parent;
+ }
+ public void setParent(P parent) {
+ this.parent = parent;
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+@Entity
+public class ChildHierarchy1 extends Child<ParentHierarchy1> {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.MappedSuperclass;
+
+@MappedSuperclass
+public class ChildHierarchy2<P extends ParentHierarchy2> extends Child<P> {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+@Entity
+public class ChildHierarchy22 extends ChildHierarchy2<ParentHierarchy22> {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: GenericsInheritanceTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.genericsinheritance;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GenericsInheritanceTest extends TestCase {
+ public void testMapping() throws Exception {
+ Session s = openSession();
+ s.close();
+ //mapping is tested
+ }
+ protected Class[] getMappings() {
+ return new Class[] {
+ ChildHierarchy1.class,
+ ParentHierarchy1.class,
+ ChildHierarchy22.class,
+ ParentHierarchy22.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Parent.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Parent.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/Parent.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.OneToMany;
+
+@MappedSuperclass
+public abstract class Parent<C extends Child> {
+
+ @Id @GeneratedValue Long id;
+ @MapKey @OneToMany(mappedBy="parent") Map<Long,C> children = new
HashMap<Long,C>();
+
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+
+ public Map<Long,C> getChildren() {
+ return children;
+ }
+ public void setChildren(Map<Long,C> children) {
+ this.children = children;
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+@Entity
+public class ParentHierarchy1 extends Parent<ChildHierarchy1> {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.MappedSuperclass;
+
+@MappedSuperclass
+public class ParentHierarchy2<C extends ChildHierarchy2> extends Parent<C> {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+@Entity
+public class ParentHierarchy22 extends ParentHierarchy2<ChildHierarchy22> {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/hibernate.cfg.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/hibernate.cfg.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/hibernate.cfg.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+<!DOCTYPE hibernate-configuration PUBLIC
+ "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+ <session-factory>
+ <mapping
resource="org/hibernate/test/annotations/Boat.hbm.xml"/>
+ <mapping package="org.hibernate.test.annotations"/>
+ <mapping class="org.hibernate.test.annotations.Plane"/>
+ </session-factory>
+</hibernate-configuration>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/EnumIdTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/EnumIdTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/EnumIdTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: EnumIdTest.java 14785 2008-06-19 10:44:33Z hardy.ferentschik $
+package org.hibernate.test.annotations.id;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.entities.Planet;
+import org.hibernate.test.annotations.id.entities.PlanetCheatSheet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests for enum type as id.
+ *
+ * @author Hardy Ferentschik
+ * @see ANN-744
+ */
+@SuppressWarnings("unchecked")
+public class EnumIdTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(EnumIdTest.class);
+
+ public EnumIdTest(String x) {
+ super(x);
+ }
+
+ public void testEnumAsId() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ PlanetCheatSheet mercury = new PlanetCheatSheet();
+ mercury.setPlanet(Planet.MERCURY);
+ mercury.setMass(3.303e+23);
+ mercury.setRadius(2.4397e6);
+ mercury.setNumberOfInhabitants(0);
+ s.persist(mercury);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ PlanetCheatSheet mercuryFromDb = (PlanetCheatSheet) s.get(PlanetCheatSheet.class,
mercury.getPlanet());
+ assertNotNull(mercuryFromDb);
+ log.debug(mercuryFromDb.toString());
+ s.delete(mercuryFromDb);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ mercury = (PlanetCheatSheet) s.get(PlanetCheatSheet.class, Planet.MERCURY);
+ assertNull(mercury);
+ tx.commit();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] { PlanetCheatSheet.class };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdClassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdClassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdClassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: IdClassTest.java 14784 2008-06-19 10:42:20Z hardy.ferentschik $
+package org.hibernate.test.annotations.id;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.entities.Location;
+import org.hibernate.test.annotations.id.entities.Tower;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("unchecked")
+public class IdClassTest extends TestCase {
+
+ public void testIdClassInSuperclass() throws Exception {
+ Tower tower = new Tower();
+ tower.latitude = 10.3;
+ tower.longitude = 45.4;
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( tower );
+ s.flush();
+ s.clear();
+ Location loc = new Location();
+ loc.latitude = tower.latitude;
+ loc.longitude = tower.longitude;
+ assertNotNull( s.get( Tower.class, loc ) );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Tower.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/IdTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,301 @@
+//$Id: IdTest.java 17735 2009-10-14 05:15:33Z stliu $
+package org.hibernate.test.annotations.id;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.mapping.Column;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.entities.Ball;
+import org.hibernate.test.annotations.id.entities.BreakDance;
+import org.hibernate.test.annotations.id.entities.Computer;
+import org.hibernate.test.annotations.id.entities.Department;
+import org.hibernate.test.annotations.id.entities.Dog;
+import org.hibernate.test.annotations.id.entities.FirTree;
+import org.hibernate.test.annotations.id.entities.Footballer;
+import org.hibernate.test.annotations.id.entities.FootballerPk;
+import org.hibernate.test.annotations.id.entities.Furniture;
+import org.hibernate.test.annotations.id.entities.GoalKeeper;
+import org.hibernate.test.annotations.id.entities.Home;
+import org.hibernate.test.annotations.id.entities.Monkey;
+import org.hibernate.test.annotations.id.entities.Phone;
+import org.hibernate.test.annotations.id.entities.Shoe;
+import org.hibernate.test.annotations.id.entities.SoundSystem;
+import org.hibernate.test.annotations.id.entities.Store;
+import org.hibernate.test.annotations.id.entities.Tree;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("unchecked")
+public class IdTest extends TestCase {
+ public void testGenericGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ SoundSystem system = new SoundSystem();
+ system.setBrand("Genelec");
+ system.setModel("T234");
+ Furniture fur = new Furniture();
+ s.persist(system);
+ s.persist(fur);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ system = (SoundSystem) s.get(SoundSystem.class, system.getId());
+ fur = (Furniture) s.get(Furniture.class, fur.getId());
+ assertNotNull(system);
+ assertNotNull(fur);
+ s.delete(system);
+ s.delete(fur);
+ tx.commit();
+ s.close();
+
+ }
+
+ /*
+ * Ensures that GenericGenerator annotations wrapped inside a
+ * GenericGenerators holder are bound correctly
+ */
+ public void testGenericGenerators() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Monkey monkey = new Monkey();
+ s.persist(monkey);
+ s.flush();
+ assertNotNull(monkey.getId());
+ tx.rollback();
+ s.close();
+ }
+
+ public void testTableGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ Ball b = new Ball();
+ Dog d = new Dog();
+ Computer c = new Computer();
+ s.persist(b);
+ s.persist(d);
+ s.persist(c);
+ tx.commit();
+ s.close();
+ assertEquals("table id not generated", new Integer(1), b.getId());
+ assertEquals("generator should not be shared", new Integer(1), d
+ .getId());
+ assertEquals("default value should work", new Long(1), c.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Ball.class, new Integer(1)));
+ s.delete(s.get(Dog.class, new Integer(1)));
+ s.delete(s.get(Computer.class, new Long(1)));
+ tx.commit();
+ s.close();
+ }
+
+ public void testSequenceGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Shoe b = new Shoe();
+ s.persist(b);
+ tx.commit();
+ s.close();
+ assertNotNull(b.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Shoe.class, b.getId()));
+ tx.commit();
+ s.close();
+ }
+
+ public void testClassLevelGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Store b = new Store();
+ s.persist(b);
+ tx.commit();
+ s.close();
+ assertNotNull(b.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Store.class, b.getId()));
+ tx.commit();
+ s.close();
+ }
+
+ public void testMethodLevelGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Department b = new Department();
+ s.persist(b);
+ tx.commit();
+ s.close();
+ assertNotNull(b.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Department.class, b.getId()));
+ tx.commit();
+ s.close();
+ }
+
+ public void testDefaultSequence() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Home h = new Home();
+ s.persist(h);
+ tx.commit();
+ s.close();
+ assertNotNull(h.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Home reloadedHome = (Home) s.get(Home.class, h.getId());
+ assertEquals(h.getId(), reloadedHome.getId());
+ s.delete(reloadedHome);
+ tx.commit();
+ s.close();
+ }
+
+ public void testParameterizedAuto() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Home h = new Home();
+ s.persist(h);
+ tx.commit();
+ s.close();
+ assertNotNull(h.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Home reloadedHome = (Home) s.get(Home.class, h.getId());
+ assertEquals(h.getId(), reloadedHome.getId());
+ s.delete(reloadedHome);
+ tx.commit();
+ s.close();
+ }
+
+ public void testIdInEmbeddableSuperclass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ FirTree chrismasTree = new FirTree();
+ s.persist(chrismasTree);
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ chrismasTree = (FirTree) s.get(FirTree.class, chrismasTree.getId());
+ assertNotNull(chrismasTree);
+ s.delete(chrismasTree);
+ tx.commit();
+ s.close();
+ }
+
+ public void testIdClass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Footballer fb = new Footballer("David", "Beckam",
"Arsenal");
+ GoalKeeper keeper = new GoalKeeper("Fabien", "Bartez",
"OM");
+ s.persist(fb);
+ s.persist(keeper);
+ tx.commit();
+ s.clear();
+
+ // lookup by id
+ tx = s.beginTransaction();
+ FootballerPk fpk = new FootballerPk("David", "Beckam");
+ fb = (Footballer) s.get(Footballer.class, fpk);
+ FootballerPk fpk2 = new FootballerPk("Fabien", "Bartez");
+ keeper = (GoalKeeper) s.get(GoalKeeper.class, fpk2);
+ assertNotNull(fb);
+ assertNotNull(keeper);
+ assertEquals("Beckam", fb.getLastname());
+ assertEquals("Arsenal", fb.getClub());
+ assertEquals(1, s.createQuery(
+ "from Footballer f where f.firstname = 'David'").list().size());
+ tx.commit();
+
+ // reattach by merge
+ tx = s.beginTransaction();
+ fb.setClub("Bimbo FC");
+ s.merge(fb);
+ tx.commit();
+
+ // reattach by saveOrUpdate
+ tx = s.beginTransaction();
+ fb.setClub("Bimbo FC SA");
+ s.saveOrUpdate(fb);
+ tx.commit();
+
+ // clean up
+ s.clear();
+ tx = s.beginTransaction();
+ fpk = new FootballerPk("David", "Beckam");
+ fb = (Footballer) s.get(Footballer.class, fpk);
+ assertEquals("Bimbo FC SA", fb.getClub());
+ s.delete(fb);
+ s.delete(keeper);
+ tx.commit();
+ s.close();
+ }
+
+ public void testColumnDefinition() {
+ Column idCol = (Column) getCfg().getClassMapping(Ball.class.getName())
+ .getIdentifierProperty().getValue().getColumnIterator().next();
+ assertEquals("ball_id", idCol.getName());
+ }
+
+ public void testLowAllocationSize() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ int size = 4;
+ BreakDance[] bds = new BreakDance[size];
+ for (int i = 0; i < size; i++) {
+ bds[i] = new BreakDance();
+ s.persist(bds[i]);
+ }
+ s.flush();
+ for (int i = 0; i < size; i++) {
+ assertEquals(i + 1, bds[i].id.intValue());
+ }
+ tx.rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] { Ball.class, Shoe.class, Store.class,
+ Department.class, Dog.class, Computer.class, Home.class,
+ Phone.class, Tree.class, FirTree.class, Footballer.class,
+ SoundSystem.class, Furniture.class, GoalKeeper.class,
+ BreakDance.class, Monkey.class};
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getAnnotatedPackages()
+ */
+ protected String[] getAnnotatedPackages() {
+ return new String[] { "org.hibernate.test.annotations",
+ "org.hibernate.test.annotations.id" };
+ }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[] { "org/hibernate/test/annotations/orm.xml" };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/JoinColumnOverrideTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/JoinColumnOverrideTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/JoinColumnOverrideTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,64 @@
+//$Id: JoinColumnOverrideTest.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.dialect.SQLServerDialect;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.entities.Bunny;
+import org.hibernate.test.annotations.id.entities.PointyTooth;
+import org.hibernate.test.annotations.id.entities.TwinkleToes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests for JIRA issue ANN-748.
+ *
+ * @author Hardy Ferentschik
+ */
+@SuppressWarnings("unchecked")
+public class JoinColumnOverrideTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(JoinColumnOverrideTest.class);
+
+ public JoinColumnOverrideTest(String x) {
+ super(x);
+ }
+
+ public void testBlownPrecision() throws Exception {
+
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(Bunny.class);
+ config.addAnnotatedClass(PointyTooth.class);
+ config.addAnnotatedClass(TwinkleToes.class);
+ config.buildSessionFactory();
+ String[] schema = config
+ .generateSchemaCreationScript(new SQLServerDialect());
+ for (String s : schema) {
+ log.debug(s);
+ }
+ String expectedSqlPointyTooth = "create table PointyTooth (id numeric(128,0) not
null, " +
+ "bunny_id numeric(128,0) null, primary key (id))";
+ assertEquals("Wrong SQL", expectedSqlPointyTooth, schema[1]);
+
+ String expectedSqlTwinkleToes = "create table TwinkleToes (id numeric(128,0) not
null, " +
+ "bunny_id numeric(128,0) null, primary key (id))";
+ assertEquals("Wrong SQL", expectedSqlTwinkleToes, schema[2]);
+ } catch (Exception e) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] {};
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/UUIDGenerator.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/UUIDGenerator.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/UUIDGenerator.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.UUID;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.id.IdentifierGenerator;
+
+/**
+ * Unlike Hibernate's UUID generator. This avoids
+ * meaningless synchronization and has less
+ * than a chance of an asteroid hitting you on the head
+ * even after trillions of rows are inserted. I know
+ * this to be true because it says so in Wikipedia(haha).
+ *
http://en.wikipedia.org/wiki/UUID#Random_UUID_probability_of_duplicates
+ *
+ */
+public class UUIDGenerator implements IdentifierGenerator {
+
+ public Serializable generate(SessionImplementor arg0, Object arg1) throws
HibernateException {
+ UUID uuid = UUID.randomUUID();
+ String sud = uuid.toString();
+ System.out.println("uuid="+uuid);
+ sud = sud.replaceAll("-", "");
+
+ BigInteger integer = new BigInteger(sud,16);
+
+ System.out.println("bi ="+integer.toString() );
+ return integer;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Ball.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Ball.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Ball.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Ball.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.TableGenerator;
+
+/**
+ * Sample of table generator
+ *
+ * @author Emmanuel Bernard
+ */
+@TableGenerator(name = "EMP_GEN", table = "GENERATOR_TABLE",
pkColumnName = "pkey",
+ valueColumnName = "hi", pkColumnValue = "Ball", allocationSize =
10)
+@Entity
+@SuppressWarnings("serial")
+public class Ball implements Serializable {
+ private Integer id;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE, generator = "EMP_GEN")
+ @Column(name = "ball_id")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/BreakDance.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/BreakDance.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/BreakDance.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: BreakDance.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.TableGenerator;
+import javax.persistence.GenerationType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class BreakDance {
+ @Id
+ @GeneratedValue(generator = "memencoIdGen", strategy = GenerationType.TABLE)
+ @TableGenerator(
+ name = "memencoIdGen",
+ table = "hi_id_key",
+ pkColumnName = "id_key",
+ valueColumnName = "next_hi",
+ pkColumnValue = "issue",
+ allocationSize = 1
+ )
+ public Integer id;
+ public String name;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Bunny.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Bunny.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Bunny.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$Id: Bunny.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Set;
+
+import javax.persistence.Column;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * Blown precision on related entity when @JoinColumn is used.
+ *
+ * @see ANN-748
+ * @author Andrew C. Oliver andyspam(a)osintegrators.com
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Bunny implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "java5_uuid")
+ @GenericGenerator(name = "java5_uuid", strategy =
"org.hibernate.test.annotations.id.UUIDGenerator")
+ @Column(name = "id", precision = 128, scale = 0)
+ private BigInteger id;
+
+ @OneToMany(mappedBy = "bunny", cascade = { CascadeType.PERSIST })
+ Set<PointyTooth> teeth;
+
+ @OneToMany(mappedBy = "bunny", cascade = { CascadeType.PERSIST })
+ Set<TwinkleToes> toes;
+
+ public void setTeeth(Set<PointyTooth> teeth) {
+ this.teeth = teeth;
+ }
+
+ public BigInteger getId() {
+ return id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Computer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Computer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Computer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: Computer.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Computer {
+ private Long id;
+ private String serialNumber;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE)
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getSerialNumber() {
+ return serialNumber;
+ }
+
+ public void setSerialNumber(String serialNumber) {
+ this.serialNumber = serialNumber;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Department.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Department.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Department.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: Department.java 17735 2009-10-14 05:15:33Z stliu $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Sample of method generator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Department implements Serializable {
+ private Long id;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Dog.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Dog.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Dog.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: Dog.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+
+/**
+ * Share the generator table decribed by the GEN_TABLE GeneratedIdTable
+ * using the Dog key as discriminator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_dog")
+@TableGenerator(name = "DogGen", table = "GENERATOR_TABLE",
pkColumnName = "pkey",
+ valueColumnName = "hi", pkColumnValue = "Dog", allocationSize =
10)
+public class Dog {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE, generator = "DogGen")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FirTree.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FirTree.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FirTree.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: FirTree.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class FirTree extends Tree {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Footballer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Footballer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Footballer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: Footballer.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(FootballerPk.class)
+@DiscriminatorColumn(name = "bibi")
+public class Footballer {
+ private String firstname;
+ private String lastname;
+ private String club;
+
+ public Footballer() {
+ }
+
+ public Footballer(String firstname, String lastname, String club) {
+ this.firstname = firstname;
+ this.lastname = lastname;
+ this.club = club;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Footballer ) ) return false;
+
+ final Footballer footballer = (Footballer) o;
+
+ if ( !firstname.equals( footballer.firstname ) ) return false;
+ if ( !lastname.equals( footballer.lastname ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstname.hashCode();
+ result = 29 * result + lastname.hashCode();
+ return result;
+ }
+
+ @Id
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ @Id
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public String getClub() {
+ return club;
+ }
+
+ public void setClub(String club) {
+ this.club = club;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FootballerPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FootballerPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/FootballerPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: FootballerPk.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+@SuppressWarnings("serial")
+public class FootballerPk implements Serializable {
+ private String firstname;
+ private String lastname;
+
+ @Column(name = "fb_fname")
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public FootballerPk() {
+ }
+
+ public FootballerPk(String firstname, String lastname) {
+ this.firstname = firstname;
+ this.lastname = lastname;
+
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof FootballerPk ) ) return false;
+
+ final FootballerPk footballerPk = (FootballerPk) o;
+
+ if ( !firstname.equals( footballerPk.firstname ) ) return false;
+ if ( !lastname.equals( footballerPk.lastname ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstname.hashCode();
+ result = 29 * result + lastname.hashCode();
+ return result;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Furniture.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Furniture.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Furniture.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Furniture.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Parameter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Furniture {
+ private Integer id;
+
+ @Id
+ @GeneratedValue(generator = "hibseq")
+ @GenericGenerator(name = "hibseq", strategy = "seqhilo",
+ parameters = {
+ @Parameter(name = "max_lo", value = "5"),
+ @Parameter(name = "sequence", value = "heybabyhey")
+ }
+ )
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/GoalKeeper.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/GoalKeeper.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/GoalKeeper.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$Id: GoalKeeper.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class GoalKeeper extends Footballer {
+ public GoalKeeper() {
+ }
+
+ public GoalKeeper(String firstname, String lastname, String club) {
+ super( firstname, lastname, club );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Home.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Home.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Home.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: Home.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Default sequence generation usage
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Home {
+ private Long id;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Location.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Location.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Location.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Location.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("serial")
+public class Location implements Serializable {
+ public double longitude;
+ public double latitude;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final Location location = (Location) o;
+
+ if ( Double.compare( location.latitude, latitude ) != 0 ) return false;
+ if ( Double.compare( location.longitude, longitude ) != 0 ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ long temp;
+ temp = longitude != +0.0d ? Double.doubleToLongBits( longitude ) : 0L;
+ result = (int) ( temp ^ ( temp >>> 32 ) );
+ temp = latitude != +0.0d ? Double.doubleToLongBits( latitude ) : 0L;
+ result = 29 * result + (int) ( temp ^ ( temp >>> 32 ) );
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/MilitaryBuilding.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/MilitaryBuilding.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/MilitaryBuilding.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+//$Id: MilitaryBuilding.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+(a)IdClass(Location.class)
+public class MilitaryBuilding {
+ @Id
+ public double longitude;
+ @Id
+ public double latitude;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Monkey.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Monkey.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Monkey.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Paul Cowan
+ */
+@Entity
+public class Monkey {
+ private String id;
+
+ @Id
+ @GeneratedValue(generator = "system-uuid-2")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Phone.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Phone.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Phone.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: Phone.java 17735 2009-10-14 05:15:33Z stliu $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Phone {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Planet.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Planet.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Planet.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,6 @@
+// $Id: Planet.java 14785 2008-06-19 10:44:33Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+public enum Planet {
+ MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE, PLUTO;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PlanetCheatSheet.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PlanetCheatSheet.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PlanetCheatSheet.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,85 @@
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+
+
+/**
+ * Test entity for enum type as id.
+ *
+ * @author Hardy Ferentschik
+ * @see ANN-744
+ */
+@Entity
+public class PlanetCheatSheet {
+
+ @Id
+ @Enumerated(EnumType.STRING)
+ @Column(name = "planet")
+ private Planet planet;
+
+ private double mass;
+
+ private double radius;
+
+ private long numberOfInhabitants;
+
+ public Planet getPlanet() {
+ return planet;
+ }
+
+ public void setPlanet(Planet planet) {
+ this.planet = planet;
+ }
+
+ public double getMass() {
+ return mass;
+ }
+
+ public void setMass(double mass) {
+ this.mass = mass;
+ }
+
+ public double getRadius() {
+ return radius;
+ }
+
+ public void setRadius(double radius) {
+ this.radius = radius;
+ }
+
+ public long getNumberOfInhabitants() {
+ return numberOfInhabitants;
+ }
+
+ public void setNumberOfInhabitants(long numberOfInhabitants) {
+ this.numberOfInhabitants = numberOfInhabitants;
+ }
+
+ /**
+ * Constructs a <code>String</code> with all attributes
+ * in name = value format.
+ *
+ * @return a <code>String</code> representation
+ * of this object.
+ */
+ public String toString()
+ {
+ final String TAB = " ";
+
+ String retValue = "";
+
+ retValue = "PlanetCheatSheet ( "
+ + super.toString() + TAB
+ + "planet = " + this.planet + TAB
+ + "mass = " + this.mass + TAB
+ + "radius = " + this.radius + TAB
+ + "numberOfInhabitants = " + this.numberOfInhabitants + TAB
+ + " )";
+
+ return retValue;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PointyTooth.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PointyTooth.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/PointyTooth.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: PointyTooth.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * Blown precision on related entity when @JoinColumn is used.
+ * Does not cause an issue on HyperSonic, but replicates nicely on PGSQL.
+ *
+ * @see ANN-748
+ * @author Andrew C. Oliver andyspam(a)osintegrators.com
+ */
+@Entity
+@SuppressWarnings("serial")
+public class PointyTooth implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "java5_uuid")
+ @GenericGenerator(name = "java5_uuid", strategy =
"org.hibernate.test.annotations.id.UUIDGenerator")
+ @Column(name = "id", precision = 128, scale = 0)
+ private BigInteger id;
+
+ @ManyToOne
+ @JoinColumn(name = "bunny_id")
+ Bunny bunny;
+
+ public void setBunny(Bunny bunny) {
+ this.bunny = bunny;
+ }
+
+ public BigInteger getId() {
+ return id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Shoe.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Shoe.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Shoe.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: Shoe.java 17735 2009-10-14 05:15:33Z stliu $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * sample of Sequance generator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Shoe implements Serializable {
+ private Long id;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/SoundSystem.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/SoundSystem.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/SoundSystem.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: SoundSystem.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class SoundSystem {
+ private String id;
+ private String brand;
+ private String model;
+
+ @Id
+ @GeneratedValue(generator = "system-uuid")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Store.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Store.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Store.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: Store.java 17735 2009-10-14 05:15:33Z stliu $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Sample of class generator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Store implements Serializable {
+ private Long id;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tower.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tower.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tower.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+//$Id: Tower.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AttributeOverride(name = "longitude", column = @Column(name =
"fld_longitude"))
+public class Tower extends MilitaryBuilding {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tree.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tree.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/Tree.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: Tree.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Tree {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/TwinkleToes.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/TwinkleToes.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/entities/TwinkleToes.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: TwinkleToes.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.entities;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * Blown precision on related entity when @JoinColumn is used.
+ * Does not cause an issue on HyperSonic, but replicates nicely on PGSQL.
+ *
+ * @see ANN-748
+ * @author Andrew C. Oliver andyspam(a)osintegrators.com
+ */
+@Entity
+@SuppressWarnings("serial")
+public class TwinkleToes implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "java5_uuid")
+ @GenericGenerator(name = "java5_uuid", strategy =
"org.hibernate.test.annotations.id.UUIDGenerator")
+ @Column(name = "id", precision = 128, scale = 0)
+ private BigInteger id;
+
+ @ManyToOne
+ Bunny bunny;
+
+ public void setBunny(Bunny bunny) {
+ this.bunny = bunny;
+ }
+
+ public BigInteger getId() {
+ return id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/package-info.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/package-info.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/package-info.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: package-info.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+/**
+ * Test package for metatata facilities
+ * It contains an example of package level metadata
+ */
+(a)org.hibernate.annotations.GenericGenerator(name = "system-uuid", strategy =
"uuid")
+(a)org.hibernate.annotations.GenericGenerators(
+ @org.hibernate.annotations.GenericGenerator(name = "system-uuid-2", strategy
= "uuid")
+)
+package org.hibernate.test.annotations.id;
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/EnumIdTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/EnumIdTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/EnumIdTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: EnumIdTest.java 14785 2008-06-19 10:44:33Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.sequences.entities.Planet;
+import org.hibernate.test.annotations.id.sequences.entities.PlanetCheatSheet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests for enum type as id.
+ *
+ * @author Hardy Ferentschik
+ * @see ANN-744
+ */
+@SuppressWarnings("unchecked")
+public class EnumIdTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(EnumIdTest.class);
+
+ public EnumIdTest(String x) {
+ super(x);
+ }
+
+ public void testEnumAsId() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ PlanetCheatSheet mercury = new PlanetCheatSheet();
+ mercury.setPlanet(Planet.MERCURY);
+ mercury.setMass(3.303e+23);
+ mercury.setRadius(2.4397e6);
+ mercury.setNumberOfInhabitants(0);
+ s.persist(mercury);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ PlanetCheatSheet mercuryFromDb = (PlanetCheatSheet) s.get(PlanetCheatSheet.class,
mercury.getPlanet());
+ assertNotNull(mercuryFromDb);
+ log.debug(mercuryFromDb.toString());
+ s.delete(mercuryFromDb);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ mercury = (PlanetCheatSheet) s.get(PlanetCheatSheet.class, Planet.MERCURY);
+ assertNull(mercury);
+ tx.commit();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] { PlanetCheatSheet.class };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdClassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdClassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdClassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: IdClassTest.java 14784 2008-06-19 10:42:20Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.sequences.entities.Location;
+import org.hibernate.test.annotations.id.sequences.entities.Tower;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("unchecked")
+public class IdClassTest extends TestCase {
+
+ public void testIdClassInSuperclass() throws Exception {
+ Tower tower = new Tower();
+ tower.latitude = 10.3;
+ tower.longitude = 45.4;
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( tower );
+ s.flush();
+ s.clear();
+ Location loc = new Location();
+ loc.latitude = tower.latitude;
+ loc.longitude = tower.longitude;
+ assertNotNull( s.get( Tower.class, loc ) );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Tower.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,308 @@
+//$Id: IdTest.java 15025 2008-08-11 09:14:39Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.mapping.Column;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.sequences.entities.Ball;
+import org.hibernate.test.annotations.id.sequences.entities.BreakDance;
+import org.hibernate.test.annotations.id.sequences.entities.Computer;
+import org.hibernate.test.annotations.id.sequences.entities.Department;
+import org.hibernate.test.annotations.id.sequences.entities.Dog;
+import org.hibernate.test.annotations.id.sequences.entities.FirTree;
+import org.hibernate.test.annotations.id.sequences.entities.Footballer;
+import org.hibernate.test.annotations.id.sequences.entities.FootballerPk;
+import org.hibernate.test.annotations.id.sequences.entities.Furniture;
+import org.hibernate.test.annotations.id.sequences.entities.GoalKeeper;
+import org.hibernate.test.annotations.id.sequences.entities.Home;
+import org.hibernate.test.annotations.id.sequences.entities.Monkey;
+import org.hibernate.test.annotations.id.sequences.entities.Phone;
+import org.hibernate.test.annotations.id.sequences.entities.Shoe;
+import org.hibernate.test.annotations.id.sequences.entities.SoundSystem;
+import org.hibernate.test.annotations.id.sequences.entities.Store;
+import org.hibernate.test.annotations.id.sequences.entities.Tree;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("unchecked")
+public class IdTest extends TestCase {
+ public void testGenericGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ SoundSystem system = new SoundSystem();
+ system.setBrand("Genelec");
+ system.setModel("T234");
+ Furniture fur = new Furniture();
+ s.persist(system);
+ s.persist(fur);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ system = (SoundSystem) s.get(SoundSystem.class, system.getId());
+ fur = (Furniture) s.get(Furniture.class, fur.getId());
+ assertNotNull(system);
+ assertNotNull(fur);
+ s.delete(system);
+ s.delete(fur);
+ tx.commit();
+ s.close();
+
+ }
+
+ /*
+ * Ensures that GenericGenerator annotations wrapped inside a
+ * GenericGenerators holder are bound correctly
+ */
+ public void testGenericGenerators() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Monkey monkey = new Monkey();
+ s.persist(monkey);
+ s.flush();
+ assertNotNull(monkey.getId());
+ tx.rollback();
+ s.close();
+ }
+
+ public void testTableGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ Ball b = new Ball();
+ Dog d = new Dog();
+ Computer c = new Computer();
+ s.persist(b);
+ s.persist(d);
+ s.persist(c);
+ tx.commit();
+ s.close();
+ assertEquals("table id not generated", new Integer(1), b.getId());
+ assertEquals("generator should not be shared", new Integer(1), d
+ .getId());
+ assertEquals("default value should work", new Long(1), c.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Ball.class, new Integer(1)));
+ s.delete(s.get(Dog.class, new Integer(1)));
+ s.delete(s.get(Computer.class, new Long(1)));
+ tx.commit();
+ s.close();
+ }
+
+ public void testSequenceGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Shoe b = new Shoe();
+ s.persist(b);
+ tx.commit();
+ s.close();
+ assertNotNull(b.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Shoe.class, b.getId()));
+ tx.commit();
+ s.close();
+ }
+
+ public void testClassLevelGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Store b = new Store();
+ s.persist(b);
+ tx.commit();
+ s.close();
+ assertNotNull(b.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Store.class, b.getId()));
+ tx.commit();
+ s.close();
+ }
+
+ public void testMethodLevelGenerator() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Department b = new Department();
+ s.persist(b);
+ tx.commit();
+ s.close();
+ assertNotNull(b.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete(s.get(Department.class, b.getId()));
+ tx.commit();
+ s.close();
+ }
+
+ public void testDefaultSequence() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Home h = new Home();
+ s.persist(h);
+ tx.commit();
+ s.close();
+ assertNotNull(h.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Home reloadedHome = (Home) s.get(Home.class, h.getId());
+ assertEquals(h.getId(), reloadedHome.getId());
+ s.delete(reloadedHome);
+ tx.commit();
+ s.close();
+ }
+
+ public void testParameterizedAuto() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Home h = new Home();
+ s.persist(h);
+ tx.commit();
+ s.close();
+ assertNotNull(h.getId());
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Home reloadedHome = (Home) s.get(Home.class, h.getId());
+ assertEquals(h.getId(), reloadedHome.getId());
+ s.delete(reloadedHome);
+ tx.commit();
+ s.close();
+ }
+
+ public void testIdInEmbeddableSuperclass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ FirTree chrismasTree = new FirTree();
+ s.persist(chrismasTree);
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ chrismasTree = (FirTree) s.get(FirTree.class, chrismasTree.getId());
+ assertNotNull(chrismasTree);
+ s.delete(chrismasTree);
+ tx.commit();
+ s.close();
+ }
+
+ public void testIdClass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Footballer fb = new Footballer("David", "Beckam",
"Arsenal");
+ GoalKeeper keeper = new GoalKeeper("Fabien", "Bartez",
"OM");
+ s.persist(fb);
+ s.persist(keeper);
+ tx.commit();
+ s.clear();
+
+ // lookup by id
+ tx = s.beginTransaction();
+ FootballerPk fpk = new FootballerPk("David", "Beckam");
+ fb = (Footballer) s.get(Footballer.class, fpk);
+ FootballerPk fpk2 = new FootballerPk("Fabien", "Bartez");
+ keeper = (GoalKeeper) s.get(GoalKeeper.class, fpk2);
+ assertNotNull(fb);
+ assertNotNull(keeper);
+ assertEquals("Beckam", fb.getLastname());
+ assertEquals("Arsenal", fb.getClub());
+ assertEquals(1, s.createQuery(
+ "from Footballer f where f.firstname = 'David'").list().size());
+ tx.commit();
+
+ // reattach by merge
+ tx = s.beginTransaction();
+ fb.setClub("Bimbo FC");
+ s.merge(fb);
+ tx.commit();
+
+ // reattach by saveOrUpdate
+ tx = s.beginTransaction();
+ fb.setClub("Bimbo FC SA");
+ s.saveOrUpdate(fb);
+ tx.commit();
+
+ // clean up
+ s.clear();
+ tx = s.beginTransaction();
+ fpk = new FootballerPk("David", "Beckam");
+ fb = (Footballer) s.get(Footballer.class, fpk);
+ assertEquals("Bimbo FC SA", fb.getClub());
+ s.delete(fb);
+ s.delete(keeper);
+ tx.commit();
+ s.close();
+ }
+
+ public void testColumnDefinition() {
+ Column idCol = (Column) getCfg().getClassMapping(Ball.class.getName())
+ .getIdentifierProperty().getValue().getColumnIterator().next();
+ assertEquals("ball_id", idCol.getName());
+ }
+
+ public void testLowAllocationSize() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ int size = 4;
+ BreakDance[] bds = new BreakDance[size];
+ for (int i = 0; i < size; i++) {
+ bds[i] = new BreakDance();
+ s.persist(bds[i]);
+ }
+ s.flush();
+ for (int i = 0; i < size; i++) {
+ assertEquals(i + 1, bds[i].id.intValue());
+ }
+ tx.rollback();
+ s.close();
+ }
+
+
+
+ @Override
+ protected boolean runForCurrentDialect() {
+ return super.runForCurrentDialect() && getDialect().supportsSequences();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] { Ball.class, Shoe.class, Store.class,
+ Department.class, Dog.class, Computer.class, Home.class,
+ Phone.class, Tree.class, FirTree.class, Footballer.class,
+ SoundSystem.class, Furniture.class, GoalKeeper.class,
+ BreakDance.class, Monkey.class};
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getAnnotatedPackages()
+ */
+ protected String[] getAnnotatedPackages() {
+ return new String[] { "org.hibernate.test.annotations",
+ "org.hibernate.test.annotations.id" };
+ }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[] { "org/hibernate/test/annotations/orm.xml" };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/JoinColumnOverrideTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/JoinColumnOverrideTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/JoinColumnOverrideTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,64 @@
+//$Id: JoinColumnOverrideTest.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.dialect.SQLServerDialect;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.id.sequences.entities.Bunny;
+import org.hibernate.test.annotations.id.sequences.entities.PointyTooth;
+import org.hibernate.test.annotations.id.sequences.entities.TwinkleToes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests for JIRA issue ANN-748.
+ *
+ * @author Hardy Ferentschik
+ */
+@SuppressWarnings("unchecked")
+public class JoinColumnOverrideTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(JoinColumnOverrideTest.class);
+
+ public JoinColumnOverrideTest(String x) {
+ super(x);
+ }
+
+ public void testBlownPrecision() throws Exception {
+
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(Bunny.class);
+ config.addAnnotatedClass(PointyTooth.class);
+ config.addAnnotatedClass(TwinkleToes.class);
+ config.buildSessionFactory();
+ String[] schema = config
+ .generateSchemaCreationScript(new SQLServerDialect());
+ for (String s : schema) {
+ log.debug(s);
+ }
+ String expectedSqlPointyTooth = "create table PointyTooth (id numeric(128,0) not
null, " +
+ "bunny_id numeric(128,0) null, primary key (id))";
+ assertEquals("Wrong SQL", expectedSqlPointyTooth, schema[1]);
+
+ String expectedSqlTwinkleToes = "create table TwinkleToes (id numeric(128,0) not
null, " +
+ "bunny_id numeric(128,0) null, primary key (id))";
+ assertEquals("Wrong SQL", expectedSqlTwinkleToes, schema[2]);
+ } catch (Exception e) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] {};
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/UUIDGenerator.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/UUIDGenerator.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/UUIDGenerator.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+package org.hibernate.test.annotations.id.sequences;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.UUID;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.id.IdentifierGenerator;
+
+/**
+ * Unlike Hibernate's UUID generator. This avoids
+ * meaningless synchronization and has less
+ * than a chance of an asteroid hitting you on the head
+ * even after trillions of rows are inserted. I know
+ * this to be true because it says so in Wikipedia(haha).
+ *
http://en.wikipedia.org/wiki/UUID#Random_UUID_probability_of_duplicates
+ *
+ */
+public class UUIDGenerator implements IdentifierGenerator {
+
+ public Serializable generate(SessionImplementor arg0, Object arg1) throws
HibernateException {
+ UUID uuid = UUID.randomUUID();
+ String sud = uuid.toString();
+ System.out.println("uuid="+uuid);
+ sud = sud.replaceAll("-", "");
+
+ BigInteger integer = new BigInteger(sud,16);
+
+ System.out.println("bi ="+integer.toString() );
+ return integer;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Ball.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Ball.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Ball.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Ball.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.TableGenerator;
+
+/**
+ * Sample of table generator
+ *
+ * @author Emmanuel Bernard
+ */
+@TableGenerator(name = "EMP_GEN", table = "GENERATOR_TABLE",
pkColumnName = "pkey",
+ valueColumnName = "hi", pkColumnValue = "Ball", allocationSize =
10)
+@Entity
+@SuppressWarnings("serial")
+public class Ball implements Serializable {
+ private Integer id;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE, generator = "EMP_GEN")
+ @Column(name = "ball_id")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/BreakDance.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/BreakDance.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/BreakDance.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: BreakDance.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.TableGenerator;
+import javax.persistence.GenerationType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class BreakDance {
+ @Id
+ @GeneratedValue(generator = "memencoIdGen", strategy = GenerationType.TABLE)
+ @TableGenerator(
+ name = "memencoIdGen",
+ table = "hi_id_key",
+ pkColumnName = "id_key",
+ valueColumnName = "next_hi",
+ pkColumnValue = "issue",
+ allocationSize = 1
+ )
+ public Integer id;
+ public String name;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Bunny.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Bunny.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Bunny.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$Id: Bunny.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Set;
+
+import javax.persistence.Column;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * Blown precision on related entity when @JoinColumn is used.
+ *
+ * @see ANN-748
+ * @author Andrew C. Oliver andyspam(a)osintegrators.com
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Bunny implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "java5_uuid")
+ @GenericGenerator(name = "java5_uuid", strategy =
"org.hibernate.test.annotations.id.UUIDGenerator")
+ @Column(name = "id", precision = 128, scale = 0)
+ private BigInteger id;
+
+ @OneToMany(mappedBy = "bunny", cascade = { CascadeType.PERSIST })
+ Set<PointyTooth> teeth;
+
+ @OneToMany(mappedBy = "bunny", cascade = { CascadeType.PERSIST })
+ Set<TwinkleToes> toes;
+
+ public void setTeeth(Set<PointyTooth> teeth) {
+ this.teeth = teeth;
+ }
+
+ public BigInteger getId() {
+ return id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Computer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Computer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Computer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: Computer.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Computer {
+ private Long id;
+ private String serialNumber;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE)
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getSerialNumber() {
+ return serialNumber;
+ }
+
+ public void setSerialNumber(String serialNumber) {
+ this.serialNumber = serialNumber;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Department.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Department.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Department.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Department.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * Sample of method generator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Department implements Serializable {
+ private Long id;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DEPT")
+ @javax.persistence.SequenceGenerator(
+ name = "SEQ_DEPT",
+ sequenceName = "my_sequence"
+ )
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Dog.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Dog.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Dog.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: Dog.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+
+/**
+ * Share the generator table decribed by the GEN_TABLE GeneratedIdTable
+ * using the Dog key as discriminator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_dog")
+@TableGenerator(name = "DogGen", table = "GENERATOR_TABLE",
pkColumnName = "pkey",
+ valueColumnName = "hi", pkColumnValue = "Dog", allocationSize =
10)
+public class Dog {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE, generator = "DogGen")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FirTree.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FirTree.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FirTree.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: FirTree.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class FirTree extends Tree {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Footballer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Footballer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Footballer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: Footballer.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(FootballerPk.class)
+@DiscriminatorColumn(name = "bibi")
+public class Footballer {
+ private String firstname;
+ private String lastname;
+ private String club;
+
+ public Footballer() {
+ }
+
+ public Footballer(String firstname, String lastname, String club) {
+ this.firstname = firstname;
+ this.lastname = lastname;
+ this.club = club;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Footballer ) ) return false;
+
+ final Footballer footballer = (Footballer) o;
+
+ if ( !firstname.equals( footballer.firstname ) ) return false;
+ if ( !lastname.equals( footballer.lastname ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstname.hashCode();
+ result = 29 * result + lastname.hashCode();
+ return result;
+ }
+
+ @Id
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ @Id
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public String getClub() {
+ return club;
+ }
+
+ public void setClub(String club) {
+ this.club = club;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FootballerPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FootballerPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/FootballerPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: FootballerPk.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+@SuppressWarnings("serial")
+public class FootballerPk implements Serializable {
+ private String firstname;
+ private String lastname;
+
+ @Column(name = "fb_fname")
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public FootballerPk() {
+ }
+
+ public FootballerPk(String firstname, String lastname) {
+ this.firstname = firstname;
+ this.lastname = lastname;
+
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof FootballerPk ) ) return false;
+
+ final FootballerPk footballerPk = (FootballerPk) o;
+
+ if ( !firstname.equals( footballerPk.firstname ) ) return false;
+ if ( !lastname.equals( footballerPk.lastname ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstname.hashCode();
+ result = 29 * result + lastname.hashCode();
+ return result;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Furniture.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Furniture.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Furniture.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Furniture.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Parameter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Furniture {
+ private Integer id;
+
+ @Id
+ @GeneratedValue(generator = "hibseq")
+ @GenericGenerator(name = "hibseq", strategy = "seqhilo",
+ parameters = {
+ @Parameter(name = "max_lo", value = "5"),
+ @Parameter(name = "sequence", value = "heybabyhey")
+ }
+ )
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/GoalKeeper.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/GoalKeeper.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/GoalKeeper.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$Id: GoalKeeper.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class GoalKeeper extends Footballer {
+ public GoalKeeper() {
+ }
+
+ public GoalKeeper(String firstname, String lastname, String club) {
+ super( firstname, lastname, club );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Home.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Home.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Home.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: Home.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Default sequence generation usage
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Home {
+ private Long id;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Location.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Location.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Location.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Location.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("serial")
+public class Location implements Serializable {
+ public double longitude;
+ public double latitude;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final Location location = (Location) o;
+
+ if ( Double.compare( location.latitude, latitude ) != 0 ) return false;
+ if ( Double.compare( location.longitude, longitude ) != 0 ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ long temp;
+ temp = longitude != +0.0d ? Double.doubleToLongBits( longitude ) : 0L;
+ result = (int) ( temp ^ ( temp >>> 32 ) );
+ temp = latitude != +0.0d ? Double.doubleToLongBits( latitude ) : 0L;
+ result = 29 * result + (int) ( temp ^ ( temp >>> 32 ) );
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/MilitaryBuilding.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/MilitaryBuilding.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/MilitaryBuilding.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+//$Id: MilitaryBuilding.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+(a)IdClass(Location.class)
+public class MilitaryBuilding {
+ @Id
+ public double longitude;
+ @Id
+ public double latitude;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Monkey.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Monkey.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Monkey.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Paul Cowan
+ */
+@Entity
+public class Monkey {
+ private String id;
+
+ @Id
+ @GeneratedValue(generator = "system-uuid-2")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Phone.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Phone.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Phone.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: Phone.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Phone {
+ private Integer id;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Phone_Gen")
+ @javax.persistence.SequenceGenerator(
+ name = "Phone_Gen",
+ sequenceName = "phone_seq"
+ )
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Planet.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Planet.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Planet.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,6 @@
+// $Id: Planet.java 14785 2008-06-19 10:44:33Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+public enum Planet {
+ MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE, PLUTO;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PlanetCheatSheet.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PlanetCheatSheet.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PlanetCheatSheet.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,85 @@
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+
+
+/**
+ * Test entity for enum type as id.
+ *
+ * @author Hardy Ferentschik
+ * @see ANN-744
+ */
+@Entity
+public class PlanetCheatSheet {
+
+ @Id
+ @Enumerated(EnumType.STRING)
+ @Column(name = "planet")
+ private Planet planet;
+
+ private double mass;
+
+ private double radius;
+
+ private long numberOfInhabitants;
+
+ public Planet getPlanet() {
+ return planet;
+ }
+
+ public void setPlanet(Planet planet) {
+ this.planet = planet;
+ }
+
+ public double getMass() {
+ return mass;
+ }
+
+ public void setMass(double mass) {
+ this.mass = mass;
+ }
+
+ public double getRadius() {
+ return radius;
+ }
+
+ public void setRadius(double radius) {
+ this.radius = radius;
+ }
+
+ public long getNumberOfInhabitants() {
+ return numberOfInhabitants;
+ }
+
+ public void setNumberOfInhabitants(long numberOfInhabitants) {
+ this.numberOfInhabitants = numberOfInhabitants;
+ }
+
+ /**
+ * Constructs a <code>String</code> with all attributes
+ * in name = value format.
+ *
+ * @return a <code>String</code> representation
+ * of this object.
+ */
+ public String toString()
+ {
+ final String TAB = " ";
+
+ String retValue = "";
+
+ retValue = "PlanetCheatSheet ( "
+ + super.toString() + TAB
+ + "planet = " + this.planet + TAB
+ + "mass = " + this.mass + TAB
+ + "radius = " + this.radius + TAB
+ + "numberOfInhabitants = " + this.numberOfInhabitants + TAB
+ + " )";
+
+ return retValue;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PointyTooth.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PointyTooth.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/PointyTooth.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: PointyTooth.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * Blown precision on related entity when @JoinColumn is used.
+ * Does not cause an issue on HyperSonic, but replicates nicely on PGSQL.
+ *
+ * @see ANN-748
+ * @author Andrew C. Oliver andyspam(a)osintegrators.com
+ */
+@Entity
+@SuppressWarnings("serial")
+public class PointyTooth implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "java5_uuid")
+ @GenericGenerator(name = "java5_uuid", strategy =
"org.hibernate.test.annotations.id.UUIDGenerator")
+ @Column(name = "id", precision = 128, scale = 0)
+ private BigInteger id;
+
+ @ManyToOne
+ @JoinColumn(name = "bunny_id")
+ Bunny bunny;
+
+ public void setBunny(Bunny bunny) {
+ this.bunny = bunny;
+ }
+
+ public BigInteger getId() {
+ return id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Shoe.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Shoe.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Shoe.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: Shoe.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * sample of Sequance generator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Shoe implements Serializable {
+ private Long id;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GEN")
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/SoundSystem.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/SoundSystem.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/SoundSystem.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: SoundSystem.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class SoundSystem {
+ private String id;
+ private String brand;
+ private String model;
+
+ @Id
+ @GeneratedValue(generator = "system-uuid")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Store.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Store.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Store.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Store.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * Sample of class generator
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)javax.persistence.SequenceGenerator(
+ name = "SEQ_STORE",
+ sequenceName = "my_sequence"
+)
+@SuppressWarnings("serial")
+public class Store implements Serializable {
+ private Long id;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long long1) {
+ id = long1;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tower.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tower.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tower.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+//$Id: Tower.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AttributeOverride(name = "longitude", column = @Column(name =
"fld_longitude"))
+public class Tower extends MilitaryBuilding {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tree.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tree.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/Tree.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: Tree.java 14760 2008-06-11 07:33:15Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Tree {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/TwinkleToes.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/TwinkleToes.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/entities/TwinkleToes.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: TwinkleToes.java 14761 2008-06-11 13:51:06Z hardy.ferentschik $
+package org.hibernate.test.annotations.id.sequences.entities;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * Blown precision on related entity when @JoinColumn is used.
+ * Does not cause an issue on HyperSonic, but replicates nicely on PGSQL.
+ *
+ * @see ANN-748
+ * @author Andrew C. Oliver andyspam(a)osintegrators.com
+ */
+@Entity
+@SuppressWarnings("serial")
+public class TwinkleToes implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "java5_uuid")
+ @GenericGenerator(name = "java5_uuid", strategy =
"org.hibernate.test.annotations.id.UUIDGenerator")
+ @Column(name = "id", precision = 128, scale = 0)
+ private BigInteger id;
+
+ @ManyToOne
+ Bunny bunny;
+
+ public void setBunny(Bunny bunny) {
+ this.bunny = bunny;
+ }
+
+ public BigInteger getId() {
+ return id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/package-info.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/package-info.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/id/sequences/package-info.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: package-info.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+/**
+ * Test package for metatata facilities
+ * It contains an example of package level metadata
+ */
+(a)org.hibernate.annotations.GenericGenerator(name = "system-uuid", strategy =
"uuid")
+(a)org.hibernate.annotations.GenericGenerators(
+ @org.hibernate.annotations.GenericGenerator(name = "system-uuid-2", strategy
= "uuid")
+)
+package org.hibernate.test.annotations.id.sequences;
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+//$Id: IdentifierCollectionTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.identifiercollection;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdentifierCollectionTest extends TestCase {
+ public void testIdBag() throws Exception {
+ Passport passport = new Passport();
+ passport.setName( "Emmanuel Bernard" );
+ Stamp canada = new Stamp();
+ canada.setCountry( "Canada" );
+ passport.getStamps().add( canada );
+ passport.getVisaStamp().add( canada );
+ Stamp norway = new Stamp();
+ norway.setCountry( "Norway" );
+ passport.getStamps().add( norway );
+ passport.getStamps().add(canada);
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( passport );
+ s.flush();
+ //s.clear();
+ passport = (Passport) s.get( Passport.class, passport.getId() );
+ int canadaCount = 0;
+ for ( Stamp stamp : passport.getStamps() ) {
+ if ( "Canada".equals( stamp.getCountry() ) ) canadaCount++;
+ }
+ assertEquals( 2, canadaCount );
+ assertEquals( 1, passport.getVisaStamp().size() );
+ tx.rollback();
+ s.close();
+ }
+ protected Class[] getMappings() {
+ return new Class[] {
+ Passport.class,
+ Stamp.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Passport.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Passport.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Passport.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,70 @@
+//$Id: Passport.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.identifiercollection;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.TableGenerator;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@TableGenerator(name="ids_generator", table="IDS")
+public class Passport {
+ @Id @GeneratedValue @Column(name="passport_id") private Long id;
+ private String name;
+
+ @ManyToMany(cascade = CascadeType.ALL)
+ @JoinTable(name="PASSPORT_STAMP")
+ @CollectionId(columns = @Column(name="COLLECTION_ID"),
type=@Type(type="long"), generator = "generator")
+ @TableGenerator(name="generator", table="IDSTAMP")
+ private Collection<Stamp> stamps = new ArrayList();
+
+ @ManyToMany(cascade = CascadeType.ALL)
+ @JoinTable(name="PASSPORT_VISASTAMP")
+ @CollectionId(columns = @Column(name="COLLECTION_ID"),
type=@Type(type="long"), generator = "ids_generator")
+ //TODO test identity generator
+ private Collection<Stamp> visaStamp = new ArrayList();
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Collection<Stamp> getStamps() {
+ return stamps;
+ }
+
+ public void setStamps(Collection<Stamp> stamps) {
+ this.stamps = stamps;
+ }
+
+ public Collection<Stamp> getVisaStamp() {
+ return visaStamp;
+ }
+
+ public void setVisaStamp(Collection<Stamp> visaStamp) {
+ this.visaStamp = visaStamp;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Stamp.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Stamp.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/identifiercollection/Stamp.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: Stamp.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.identifiercollection;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Stamp {
+ @Id @GeneratedValue private Long id;
+ private String country;
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItems.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItems.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItems.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+//$
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.IdClass;
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.Table;
+import javax.persistence.ManyToOne;
+import javax.persistence.Basic;
+import javax.persistence.JoinColumns;
+import javax.persistence.Entity;
+
+@Entity
+@Table(name="BasketItems")
+(a)org.hibernate.annotations.Proxy(lazy=false)
+(a)IdClass(BasketItemsPK.class)
+public class BasketItems implements Serializable {
+
+ private static final long serialVersionUID = -4580497316918713849L;
+
+ @Id
+ @ManyToOne(cascade={ CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumns({ @JoinColumn(name="basketDatetime",
referencedColumnName="basketDatetime"), @JoinColumn(name="customerID",
referencedColumnName="customerID") })
+ @Basic(fetch= FetchType.LAZY)
+ private ShoppingBaskets shoppingBaskets;
+
+ @Column(name="cost", nullable=false)
+ @Id
+ private Double cost;
+
+ public void setCost(double value) {
+ setCost(new Double(value));
+ }
+
+ public void setCost(Double value) {
+ this.cost = value;
+ }
+
+ public Double getCost() {
+ return cost;
+ }
+
+ public void setShoppingBaskets(ShoppingBaskets value) {
+ this.shoppingBaskets = value;
+ }
+
+ public ShoppingBaskets getShoppingBaskets() {
+ return shoppingBaskets;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItemsPK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItemsPK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/BasketItemsPK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,72 @@
+//$
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.Column;
+import javax.persistence.ManyToOne;
+import javax.persistence.Basic;
+import javax.persistence.Embeddable;
+import javax.persistence.FetchType;
+
+@Embeddable
+public class BasketItemsPK implements Serializable {
+
+ private static final long serialVersionUID = 3585214409096105241L;
+
+ public boolean equals(Object aObj) {
+ if (aObj == this)
+ return true;
+ if (!(aObj instanceof BasketItemsPK))
+ return false;
+ BasketItemsPK basketitemspk = (BasketItemsPK)aObj;
+ if (getShoppingBaskets() == null && basketitemspk.getShoppingBaskets() !=
null)
+ return false;
+ if (!getShoppingBaskets().equals(basketitemspk.getShoppingBaskets()))
+ return false;
+ if ((getCost() != null && !getCost().equals(basketitemspk.getCost())) ||
(getCost() == null && basketitemspk.getCost() != null))
+ return false;
+ return true;
+ }
+
+ public int hashCode() {
+ int hashcode = 0;
+ if (getShoppingBaskets() != null) {
+ hashcode = hashcode + (getShoppingBaskets().getOwner() == null ? 0 :
getShoppingBaskets().getOwner().hashCode());
+ hashcode = hashcode + (getShoppingBaskets().getBasketDatetime() == null ? 0 :
getShoppingBaskets().getBasketDatetime().hashCode());
+ }
+ hashcode = hashcode + (getCost() == null ? 0 : getCost().hashCode());
+ return hashcode;
+ }
+
+ @Id
+ @ManyToOne(cascade={ CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumns({ @JoinColumn(name="basketDatetime",
referencedColumnName="basketDatetime"), @JoinColumn(name="customerID",
referencedColumnName="customerID") })
+ @Basic(fetch= FetchType.LAZY)
+ private ShoppingBaskets shoppingBaskets;
+
+ public void setShoppingBaskets(ShoppingBaskets value) {
+ this.shoppingBaskets = value;
+ }
+
+ public ShoppingBaskets getShoppingBaskets() {
+ return this.shoppingBaskets;
+ }
+
+ @Column(name="cost", nullable=false)
+ @Id
+ private Double cost;
+
+ public void setCost(Double value) {
+ this.cost = value;
+ }
+
+ public Double getCost() {
+ return this.cost;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Card.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Card.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Card.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,70 @@
+//$Id: Card.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Card {
+
+ @Id
+ private CardPrimaryKey primaryKey = new CardPrimaryKey();
+
+ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy =
"primaryKey.card")
+ private Set<CardField> fields;
+
+ @ManyToOne
+ private CardField mainCardField;
+
+ @Embeddable
+ public static class CardPrimaryKey implements Serializable {
+
+ public CardPrimaryKey() {}
+
+ @ManyToOne(optional = false)
+ private Project project;
+
+ public Project getProject() {
+ return project;
+ }
+
+ public void setProject(Project project) {
+ this.project = project;
+ }
+
+ }
+
+ public Set<CardField> getFields() {
+ return fields;
+ }
+
+ public void setFields(Set<CardField> fields) {
+ this.fields = fields;
+ }
+
+ public CardPrimaryKey getPrimaryKey() {
+ return primaryKey;
+ }
+
+ public void setPrimaryKey(CardPrimaryKey primaryKey) {
+ this.primaryKey = primaryKey;
+ }
+
+ public CardField getMainCardField() {
+ return mainCardField;
+ }
+
+ public void setMainCardField(CardField mainCardField) {
+ this.mainCardField = mainCardField;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardField.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardField.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardField.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,64 @@
+//$Id: CardField.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CardField {
+
+ @Id
+ private PrimaryKey primaryKey = new PrimaryKey();
+
+ @ManyToOne
+ private Card cardtmp;
+
+ @Embeddable
+ public static class PrimaryKey implements Serializable {
+
+ @ManyToOne(optional = false)
+ private Card card;
+
+ @ManyToOne(optional = false)
+ private CardKey key;
+
+ public Card getCard() {
+ return card;
+ }
+
+ public void setCard(Card card) {
+ this.card = card;
+ }
+
+ public CardKey getKey() {
+ return key;
+ }
+
+ public void setKey(CardKey key) {
+ this.key = key;
+ }
+ }
+
+ public Card getCardtmp() {
+ return cardtmp;
+ }
+
+ public void setCardtmp(Card cardtmp) {
+ this.cardtmp = cardtmp;
+ }
+
+ public PrimaryKey getPrimaryKey() {
+ return primaryKey;
+ }
+
+ public void setPrimaryKey(PrimaryKey primaryKey) {
+ this.primaryKey = primaryKey;
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardKey.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardKey.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/CardKey.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: CardKey.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CardKey {
+ @Id
+ @GeneratedValue
+ private int id;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,28 @@
+//$Id: Customer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Table;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+
+
+@Entity
+@Table(name = "Bs")
+public class Customer implements Serializable {
+ @Id @GeneratedValue
+ public Integer id;
+
+ @OneToMany(mappedBy = "customer")
+ public Set<StoreCustomer> stores;
+
+ private static final long serialVersionUID = 3818501706063039923L;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customers.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customers.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Customers.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+//$
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="Customers")
+(a)org.hibernate.annotations.Proxy(lazy=false)
+public class Customers implements Serializable {
+
+ private static final long serialVersionUID = -885167444315163039L;
+
+ @Column(name="customerID", nullable=false)
+ @Id
+ private int customerID;
+
+ @OneToMany(mappedBy="owner", cascade= CascadeType.ALL,
targetEntity=ShoppingBaskets.class)
+ @org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.TRUE)
+ private java.util.Set shoppingBasketses = new java.util.HashSet();
+
+ public void setCustomerID(int value) {
+ this.customerID = value;
+ }
+
+ public int getCustomerID() {
+ return customerID;
+ }
+
+ public int getORMID() {
+ return getCustomerID();
+ }
+
+ public void setShoppingBasketses(java.util.Set value) {
+ this.shoppingBasketses = value;
+ }
+
+ public java.util.Set getShoppingBasketses() {
+ return shoppingBasketses;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/IdManyToOneTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/IdManyToOneTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/IdManyToOneTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,82 @@
+//$Id: IdManyToOneTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdManyToOneTest extends TestCase {
+ public void testFkCreationOrdering() throws Exception {
+ //no real test case, the sessionFactory building is tested
+ Session s = openSession();
+ s.close();
+ }
+
+ public void getBiDirOneToManyInId() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ CardKey key = new CardKey();
+ s.persist( key );
+ Project project = new Project();
+ s.persist( project );
+ Card card = new Card();
+ card.getPrimaryKey().setProject( project );
+ s.persist( card );
+ CardField field = new CardField();
+ field.getPrimaryKey().setKey( key );
+ field.getPrimaryKey().setCard( card );
+ s.persist( field );
+ card.setMainCardField( field );
+ s.flush();
+ s.clear();
+ card = (Card) s.createQuery( "from Card c").list().get(0);
+ assertEquals( 1, card.getFields().size() );
+ assertEquals( card.getMainCardField(), card.getFields().iterator().next() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testIdClassManyToOne() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Store store = new Store();
+ Customer customer = new Customer();
+ s.persist( store );
+ s.persist( customer );
+ StoreCustomer sc = new StoreCustomer( store, customer );
+ s.persist( sc );
+ s.flush();
+ s.clear();
+
+ store = (Store) s.get(Store.class, store.id );
+ assertEquals( 1, store.customers.size() );
+ assertEquals( customer.id, store.customers.iterator().next().customer.id );
+ tx.rollback();
+
+ //TODO test Customers / ShoppingBaskets / BasketItems
testIdClassManyToOneWithReferenceColumn
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Store.class,
+ Customer.class,
+ StoreCustomer.class,
+ CardKey.class,
+ CardField.class,
+ Card.class,
+ Project.class,
+
+ //tested only through deployment
+ //ANN-590 testIdClassManyToOneWithReferenceColumn
+ Customers.class,
+ ShoppingBaskets.class,
+ ShoppingBasketsPK.class,
+ BasketItems.class,
+ BasketItemsPK.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Project.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Project.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Project.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: Project.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Project {
+
+ @Id
+ @GeneratedValue
+ private int id;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBaskets.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBaskets.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBaskets.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,66 @@
+//$
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="ShoppingBasket")
+(a)org.hibernate.annotations.Proxy(lazy=false)
+(a)IdClass(ShoppingBasketsPK.class)
+public class ShoppingBaskets implements Serializable {
+
+ private static final long serialVersionUID = 4739240471638885734L;
+
+ @Id
+ @ManyToOne(cascade={ CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumns({ @JoinColumn(name="customerID",
referencedColumnName="customerID") })
+ @Basic(fetch=FetchType.LAZY)
+ private Customers owner;
+
+ @Column(name="basketDatetime", nullable=false)
+ @Id
+ private java.util.Date basketDatetime;
+
+ @OneToMany(mappedBy="shoppingBaskets", cascade=CascadeType.ALL,
targetEntity=BasketItems.class)
+ @org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.TRUE)
+ private java.util.Set items = new java.util.HashSet();
+
+ public void setBasketDatetime(java.util.Date value) {
+ this.basketDatetime = value;
+ }
+
+ public java.util.Date getBasketDatetime() {
+ return basketDatetime;
+ }
+
+ public void setOwner(Customers value) {
+ this.owner = value;
+ }
+
+ public Customers getOwner() {
+ return owner;
+ }
+
+ public void setItems(java.util.Set value) {
+ this.items = value;
+ }
+
+ public java.util.Set getItems() {
+ return items;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBasketsPK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBasketsPK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/ShoppingBasketsPK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,70 @@
+//$
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumns;
+import javax.persistence.FetchType;
+import javax.persistence.Basic;
+import javax.persistence.JoinColumn;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+@Embeddable
+public class ShoppingBasketsPK implements Serializable {
+ private static final long serialVersionUID = 4121297376338222776L;
+
+ public boolean equals(Object aObj) {
+ if (aObj == this)
+ return true;
+ if (!(aObj instanceof ShoppingBasketsPK))
+ return false;
+ ShoppingBasketsPK shoppingbasketspk = (ShoppingBasketsPK)aObj;
+ if (getOwner() == null && shoppingbasketspk.getOwner() != null)
+ return false;
+ if (!getOwner().equals(shoppingbasketspk.getOwner()))
+ return false;
+ if (getBasketDatetime() != shoppingbasketspk.getBasketDatetime())
+ return false;
+ return true;
+ }
+
+ public int hashCode() {
+ int hashcode = 0;
+ if (getOwner() != null) {
+ hashcode = hashcode + (int) getOwner().getORMID();
+ }
+ hashcode = hashcode + (getBasketDatetime() == null ? 0 :
getBasketDatetime().hashCode());
+ return hashcode;
+ }
+
+ @Id
+ @ManyToOne(cascade={ CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumns({ @JoinColumn(name="customerID",
referencedColumnName="customerID") })
+ @Basic(fetch= FetchType.LAZY)
+ private Customers owner;
+
+ public void setOwner(Customers value) {
+ this.owner = value;
+ }
+
+ public Customers getOwner() {
+ return this.owner;
+ }
+
+ @Column(name="basketDatetime", nullable=false)
+ @Id
+ private java.util.Date basketDatetime;
+
+ public void setBasketDatetime(java.util.Date value) {
+ this.basketDatetime = value;
+ }
+
+ public java.util.Date getBasketDatetime() {
+ return this.basketDatetime;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Store.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Store.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/Store.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: Store.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Table;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "`As`")
+public class Store implements Serializable {
+ @Id @GeneratedValue
+ public Integer id;
+
+ @OneToMany(mappedBy = "store")
+ public Set<StoreCustomer> customers;
+
+
+ private static final long serialVersionUID = 1748046699322502790L;
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: StoreCustomer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "ABs")
+@IdClass( StoreCustomerPK.class)
+public class StoreCustomer implements Serializable {
+ StoreCustomer() {}
+ @Id
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "idA")
+ public Store store;
+
+ @Id
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "idB")
+ public Customer customer;
+
+
+ public StoreCustomer(Store store, Customer customer) {
+ this.store = store;
+ this.customer = customer;
+ }
+
+
+ private static final long serialVersionUID = -8295955012787627232L;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,32 @@
+//$Id: StoreCustomerPK.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StoreCustomerPK implements Serializable {
+ StoreCustomerPK() {}
+ @Id
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "idA")
+ public Store store;
+
+ @Id
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "idB")
+ public Customer customer;
+
+
+ public StoreCustomerPK(Store store, Customer customer) {
+ this.store = store;
+ this.customer = customer;
+ }
+
+
+ private static final long serialVersionUID = -1102111921432271459L;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/A.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/A.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/A.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+@Entity
+public class A {
+
+ @Id
+ private int id;
+
+ @OneToMany( mappedBy = "parent" )
+ List<C> children;
+
+ public A() {
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public List<C> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<C> children) {
+ this.children = children;
+ }
+
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Acces.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Acces.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Acces.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class Acces implements Serializable {
+ @Id
+ private BigInteger idpk;
+
+ @ManyToOne
+ private Droitacces idpkdracc;
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalIdManyToOneTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalIdManyToOneTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalIdManyToOneTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AlphabeticalIdManyToOneTest extends TestCase {
+ public void testAlphabeticalTest() throws Exception {
+ //test through deployment
+ }
+
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ B.class,
+ C.class,
+ A.class
+
+
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalManyToOneTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalManyToOneTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/AlphabeticalManyToOneTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AlphabeticalManyToOneTest extends TestCase {
+ public void testAlphabeticalTest() throws Exception {
+ //test through deployment
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Acces.class,
+ Droitacces.class,
+ Benefserv.class,
+ Service.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/B.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/B.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/B.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+@Entity
+@IdClass( BId.class )
+public class B {
+
+ @Id
+ private C parent;
+
+ @Id
+ private int sequenceNumber;
+
+ public B() {
+ }
+
+ public C getParent() {
+ return parent;
+ }
+
+ public void setParent(C parent) {
+ this.parent = parent;
+ }
+
+ public int getSequenceNumber() {
+ return sequenceNumber;
+ }
+
+ public void setSequenceNumber(int sequenceNumber) {
+ this.sequenceNumber = sequenceNumber;
+ }
+
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/BId.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/BId.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/BId.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,69 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+@Embeddable
+public class BId implements Serializable {
+
+ @ManyToOne
+ @JoinColumns( {
+ @JoinColumn( name = "aId", nullable = false ),
+ @JoinColumn( name = "bSequenceNumber", nullable = false )
+ } )
+ private C parent;
+
+ private int sequenceNumber;
+
+ public BId() {
+ }
+
+ public C getParent() {
+ return parent;
+ }
+
+ public void setParent(C parent) {
+ this.parent = parent;
+ }
+
+ public int getSequenceNumber() {
+ return sequenceNumber;
+ }
+
+ public void setSequenceNumber(int sequenceNumber) {
+ this.sequenceNumber = sequenceNumber;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ( ( parent == null ) ? 0 : parent.hashCode() );
+ result = prime * result + sequenceNumber;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj )
+ return true;
+ if ( obj == null )
+ return false;
+ if ( getClass() != obj.getClass() )
+ return false;
+ final BId other = (BId) obj;
+ if ( parent == null ) {
+ if ( other.parent != null )
+ return false;
+ }
+ else if ( !parent.equals( other.parent ) )
+ return false;
+ if ( sequenceNumber != other.sequenceNumber )
+ return false;
+ return true;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Benefserv.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Benefserv.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Benefserv.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.math.BigInteger;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class Benefserv {
+ @Id
+ private BigInteger idpk;
+
+ @ManyToOne
+ private Service idpkser;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/C.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/C.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/C.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+
+@Entity
+@IdClass( CId.class )
+public class C {
+
+ @Id
+ private A parent;
+
+ @Id
+ private int sequenceNumber;
+
+ @OneToMany( mappedBy = "parent" )
+ List<B> children;
+
+ public C() {
+ }
+
+ public A getParent() {
+ return parent;
+ }
+
+ public void setParent(A parent) {
+ this.parent = parent;
+ }
+
+ public int getSequenceNumber() {
+ return sequenceNumber;
+ }
+
+ public void setSequenceNumber(int sequenceNumber) {
+ this.sequenceNumber = sequenceNumber;
+ }
+
+ public List<B> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<B> children) {
+ this.children = children;
+ }
+
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/CId.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/CId.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/CId.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,67 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Embeddable
+public class CId implements Serializable {
+
+ @ManyToOne
+ @JoinColumn( name = "aId", nullable = false )
+ private A parent;
+
+ private int sequenceNumber;
+
+ public CId() {
+ }
+
+ public A getParent() {
+ return parent;
+ }
+
+ public void setParent(A parent) {
+ this.parent = parent;
+ }
+
+ public int getSequenceNumber() {
+ return sequenceNumber;
+ }
+
+ public void setSequenceNumber(int sequenceNumber) {
+ this.sequenceNumber = sequenceNumber;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ( ( parent == null ) ? 0 : parent.hashCode() );
+ result = prime * result + sequenceNumber;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj )
+ return true;
+ if ( obj == null )
+ return false;
+ if ( getClass() != obj.getClass() )
+ return false;
+ final CId other = (CId) obj;
+ if ( parent == null ) {
+ if ( other.parent != null )
+ return false;
+ }
+ else if ( !parent.equals( other.parent ) )
+ return false;
+ if ( sequenceNumber != other.sequenceNumber )
+ return false;
+ return true;
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Droitacces.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Droitacces.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Droitacces.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.math.BigInteger;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class Droitacces {
+ @Id
+ private BigInteger idpk;
+
+ @ManyToOne
+ private Benefserv idpkbenef;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Service.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Service.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/idmanytoone/alphabetical/Service.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,14 @@
+//$
+package org.hibernate.test.annotations.idmanytoone.alphabetical;
+
+import java.math.BigInteger;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+
+@Entity
+public class Service {
+ @Id
+ private BigInteger idpk;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Country.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Country.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Country.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+//$Id: Country.java 14801 2008-06-24 19:03:32Z hardy.ferentschik $
+package org.hibernate.test.annotations.immutable;
+
+/**
+ * @author Hardy Ferentschik
+ */
+import java.io.Serializable;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.Immutable;
+
+@Entity
+@Immutable
+@SuppressWarnings("serial")
+public class Country implements Serializable {
+ private Integer id;
+
+ private String name;
+
+ private List<State> states;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ @OneToMany(fetch = FetchType.LAZY)
+ @Cascade(org.hibernate.annotations.CascadeType.ALL)
+ @Immutable
+ public List<State> getStates() {
+ return states;
+ }
+
+ public void setStates(List<State> states) {
+ this.states = states;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Foobar.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Foobar.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/Foobar.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+// $Id: Foobar.java 14801 2008-06-24 19:03:32Z hardy.ferentschik $
+package org.hibernate.test.annotations.immutable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Immutable;
+
+/**
+ * @author Hardy Ferentschik
+ */
+@Entity
+public class Foobar {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ @Immutable
+ private String name;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/ImmutableTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/ImmutableTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/ImmutableTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,165 @@
+//$Id: ImmutableTest.java 16426 2009-04-23 16:01:18Z jcosta(a)redhat.com $
+package org.hibernate.test.annotations.immutable;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.dialect.SQLServerDialect;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.fkcircularity.A;
+import org.hibernate.test.annotations.fkcircularity.B;
+import org.hibernate.test.annotations.fkcircularity.C;
+import org.hibernate.test.annotations.fkcircularity.D;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests for <code>Immutable</code> annotation.
+ *
+ * @author Hardy Ferentschik
+ */
+@SuppressWarnings("unchecked")
+public class ImmutableTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(ImmutableTest.class);
+
+ public ImmutableTest(String x) {
+ super(x);
+ }
+
+ public void testImmutableEntity() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Country country = new Country();
+ country.setName("Germany");
+ s.persist(country);
+ tx.commit();
+ s.close();
+
+ // try changing the entity
+ s = openSession();
+ tx = s.beginTransaction();
+ Country germany = (Country) s.get(Country.class, country.getId());
+ assertNotNull(germany);
+ germany.setName("France");
+ assertEquals("Local name can be changed", "France",
germany.getName());
+ s.save(germany);
+ tx.commit();
+ s.close();
+
+ // retrieving the country again - it should be unmodified
+ s = openSession();
+ tx = s.beginTransaction();
+ germany = (Country) s.get(Country.class, country.getId());
+ assertNotNull(germany);
+ assertEquals("Name should not have changed", "Germany",
germany.getName());
+ tx.commit();
+ s.close();
+
+// // try deletion
+// s = openSession();
+// tx = s.beginTransaction();
+// s.delete(germany);
+// tx.commit();
+// s.close();
+//
+// s = openSession();
+// tx = s.beginTransaction();
+// germany = (Country) s.get(Country.class, country.getId());
+// assertNotNull(germany);
+// assertEquals("Name should not have changed", "Germany",
germany.getName());
+// s.close();
+ }
+
+ public void testImmutableCollection() {
+ Country country = new Country();
+ country.setName("Germany");
+ List states = new ArrayList<State>();
+ State bayern = new State();
+ bayern.setName("Bayern");
+ State hessen = new State();
+ hessen.setName("Hessen");
+ State sachsen = new State();
+ sachsen.setName("Sachsen");
+ states.add(bayern);
+ states.add(hessen);
+ states.add(sachsen);
+ country.setStates(states);
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist(country);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Country germany = (Country) s.get(Country.class, country.getId());
+ assertNotNull(germany);
+ assertEquals("Wrong number of states", 3, germany.getStates().size());
+
+ // try adding a state
+ State foobar = new State();
+ foobar.setName("foobar");
+ s.save(foobar);
+ germany.getStates().add(foobar);
+ try {
+ tx.commit();
+ fail();
+ } catch (HibernateException e) {
+ assertTrue(e.getMessage().contains("changed an immutable collection
instance"));
+ log.debug("success");
+ }
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ germany = (Country) s.get(Country.class, country.getId());
+ assertNotNull(germany);
+ assertEquals("Wrong number of states", 3, germany.getStates().size());
+
+ // try deleting a state
+ germany.getStates().remove(0);
+ try {
+ tx.commit();
+ fail();
+ } catch (HibernateException e) {
+ assertTrue(e.getMessage().contains("changed an immutable collection
instance"));
+ log.debug("success");
+ }
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ germany = (Country) s.get(Country.class, country.getId());
+ assertNotNull(germany);
+ assertEquals("Wrong number of states", 3, germany.getStates().size());
+ tx.commit();
+ s.close();
+ }
+
+ public void testMiscplacedImmutableAnnotation() {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(Foobar.class);
+ config.buildSessionFactory();
+ fail();
+ } catch (AnnotationException ae) {
+ log.debug("succes");
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[] { Country.class, State.class};
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/State.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/State.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/immutable/State.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+// $Id: State.java 14801 2008-06-24 19:03:32Z hardy.ferentschik $
+package org.hibernate.test.annotations.immutable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Hardy Ferentschik
+ */
+@Entity
+public class State {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ private String name;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressBook.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressBook.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressBook.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,75 @@
+//$Id: AddressBook.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+import javax.persistence.JoinTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class AddressBook {
+ private Integer id;
+ private String owner;
+ private Map<AddressEntryPk, AddressEntry> entries = new HashMap<AddressEntryPk,
AddressEntry>();
+ private Map<String, AddressEntry> lastNameEntries = new HashMap<String,
AddressEntry>();
+ private Map<AlphabeticalDirectory, AddressEntry> directoryEntries = new
HashMap<AlphabeticalDirectory, AddressEntry>();
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ @MapKey
+ @OneToMany(mappedBy = "book", cascade = {CascadeType.MERGE,
CascadeType.PERSIST, CascadeType.REMOVE})
+ @JoinTable(name="AddRegEntry")
+ public Map<AddressEntryPk, AddressEntry> getEntries() {
+ return entries;
+ }
+
+ public void setEntries(Map<AddressEntryPk, AddressEntry> entries) {
+ this.entries = entries;
+ }
+
+ @MapKey(name = "person.lastname")
+ @OneToMany(mappedBy = "book")
+ public Map<String, AddressEntry> getLastNameEntries() {
+ return lastNameEntries;
+ }
+
+ public void setLastNameEntries(Map<String, AddressEntry> lastNameEntries) {
+ this.lastNameEntries = lastNameEntries;
+ }
+
+ @MapKey(name = "directory")
+ @OneToMany(mappedBy = "book")
+ @JoinTable(name="Dir_Entry")
+ public Map<AlphabeticalDirectory, AddressEntry> getDirectoryEntries() {
+ return directoryEntries;
+ }
+
+ public void setDirectoryEntries(Map<AlphabeticalDirectory, AddressEntry>
directoryEntries) {
+ this.directoryEntries = directoryEntries;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntry.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntry.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntry.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,76 @@
+//$Id: AddressEntry.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class AddressEntry {
+ private AddressEntryPk person;
+ private String street;
+ private String city;
+ private AddressBook book;
+ private AlphabeticalDirectory directory;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof AddressEntry ) ) return false;
+
+ final AddressEntry addressEntry = (AddressEntry) o;
+
+ if ( !person.equals( addressEntry.person ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return person.hashCode();
+ }
+
+ @EmbeddedId
+ public AddressEntryPk getPerson() {
+ return person;
+ }
+
+ public void setPerson(AddressEntryPk person) {
+ this.person = person;
+ }
+
+ public String getStreet() {
+ return street;
+ }
+
+ public void setStreet(String street) {
+ this.street = street;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ @ManyToOne
+ public AddressBook getBook() {
+ return book;
+ }
+
+ public void setBook(AddressBook book) {
+ this.book = book;
+ }
+
+ @ManyToOne
+ public AlphabeticalDirectory getDirectory() {
+ return directory;
+ }
+
+ public void setDirectory(AlphabeticalDirectory directory) {
+ this.directory = directory;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+//$Id: AddressEntryPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class AddressEntryPk implements Serializable {
+ private String firstname;
+ private String lastname;
+
+ public AddressEntryPk() {
+ }
+
+ public AddressEntryPk(String firstname, String lastname) {
+ this.firstname = firstname;
+ this.lastname = lastname;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof AddressEntryPk ) ) return false;
+
+ final AddressEntryPk addressEntryPk = (AddressEntryPk) o;
+
+ if ( !firstname.equals( addressEntryPk.firstname ) ) return false;
+ if ( !lastname.equals( addressEntryPk.lastname ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstname.hashCode();
+ result = 29 * result + lastname.hashCode();
+ return result;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: AlphabeticalDirectory.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class AlphabeticalDirectory {
+ @Id @GeneratedValue private Integer id;
+ private String name;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: Atmosphere.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.Column;
+import javax.persistence.JoinTable;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.MapKeyManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Atmosphere {
+ @Id
+ @GeneratedValue
+ public Integer id;
+
+ @ManyToMany(cascade = CascadeType.ALL)
+ @MapKey(columns = {@Column(name="gas_name")})
+ public Map<String, Gas> gases = new HashMap<String, Gas>();
+
+ @ManyToMany(cascade = CascadeType.ALL)
+ @MapKeyManyToMany(joinColumns = @JoinColumn(name="gas_id") )
+ @JoinTable(name = "Gas_per_key")
+ public Map<GasKey, Gas> gasesPerKey = new HashMap<GasKey, Gas>();
+
+ @CollectionOfElements
+ @Column(name="composition_rate")
+ @MapKeyManyToMany(joinColumns = @JoinColumn(name="gas_id"))
+ @JoinTable(name = "Composition", joinColumns = @JoinColumn(name =
"atmosphere_id"))
+ public Map<Gas, Double> composition = new HashMap<Gas, Double>();
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Drawer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Drawer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Drawer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,59 @@
+//$Id: Drawer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Drawer {
+ private Long id;
+ private List<Dress> dresses;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * Unidirectional one to many list
+ *
+ * @return
+ */
+ @OneToMany
+ @IndexColumn(name = "from_bottom_position")
+ public List<Dress> getDresses() {
+ return dresses;
+ }
+
+ public void setDresses(List<Dress> dresses) {
+ this.dresses = dresses;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Drawer ) ) return false;
+
+ final Drawer drawer = (Drawer) o;
+
+ if ( !getId().equals( drawer.getId() ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return getId().hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Dress.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Dress.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Dress.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,41 @@
+//$Id: Dress.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Dress {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ @Column(name = "dress_id")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Dress ) ) return false;
+
+ final Dress dress = (Dress) o;
+
+ if ( !getId().equals( dress.getId() ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return getId().hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Gas.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Gas.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Gas.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+//$Id: Gas.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Gas {
+ @Id
+ @GeneratedValue
+ public Integer id;
+ public String name;
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GasKey.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GasKey.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GasKey.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: GasKey.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class GasKey {
+ @Id private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Generation.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Generation.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Generation.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: Generation.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Generation {
+
+ private String age;
+ private String culture;
+
+ public String getAge() {
+ return age;
+ }
+ public void setAge(String age) {
+ this.age = age;
+ }
+ public String getCulture() {
+ return culture;
+ }
+ public void setCulture(String culture) {
+ this.culture = culture;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationGroup.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationGroup.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationGroup.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: GenerationGroup.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class GenerationGroup {
+
+ @Id
+ @GeneratedValue
+ private int id;
+
+ private Generation generation;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Generation getGeneration() {
+ return generation;
+ }
+
+ public void setGeneration(Generation generation) {
+ this.generation = generation;
+ }
+
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationUser.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationUser.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/GenerationUser.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+//$Id: GenerationUser.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.OneToMany;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.MapKey;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class GenerationUser {
+
+ @Id
+ @GeneratedValue
+ private int id;
+
+ @OneToMany
+ @MapKey(name="generation")
+ private Map<Generation, GenerationGroup> ref = new HashMap<Generation,
GenerationGroup>();
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Map<Generation, GenerationGroup> getRef() {
+ return ref;
+ }
+
+ public void setRef(Map<Generation, GenerationGroup> ref) {
+ this.ref = ref;
+ }
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,549 @@
+//$Id: IndexedCollectionTest.java 15025 2008-08-11 09:14:39Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.Hibernate;
+import org.hibernate.dialect.HSQLDialect;
+import org.hibernate.test.annotations.RequiresDialect;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Test index collections
+ *
+ * @author Emmanuel Bernard
+ */
+public class IndexedCollectionTest extends TestCase {
+ public void testFkList() throws Exception {
+ Wardrobe w = new Wardrobe();
+ Drawer d1 = new Drawer();
+ Drawer d2 = new Drawer();
+ w.setDrawers( new ArrayList<Drawer>() );
+ w.getDrawers().add( d1 );
+ w.getDrawers().add( d2 );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( w );
+
+ s.flush();
+ s.clear();
+
+ w = (Wardrobe) s.get( Wardrobe.class, w.getId() );
+ assertNotNull( w );
+ assertNotNull( w.getDrawers() );
+ List<Drawer> result = w.getDrawers();
+ assertEquals( 2, result.size() );
+ assertEquals( d2.getId(), result.get( 1 ).getId() );
+ result.remove( d1 );
+ s.flush();
+ d1 = (Drawer) s.merge( d1 );
+ result.add( d1 );
+
+ s.flush();
+ s.clear();
+
+ w = (Wardrobe) s.get( Wardrobe.class, w.getId() );
+ assertNotNull( w );
+ assertNotNull( w.getDrawers() );
+ result = w.getDrawers();
+ assertEquals( 2, result.size() );
+ assertEquals( d1.getId(), result.get( 1 ).getId() );
+ s.delete( result.get( 0 ) );
+ s.delete( result.get( 1 ) );
+ s.delete( w );
+ s.flush();
+ tx.rollback();
+ s.close();
+ }
+
+ public void testJoinedTableList() throws Exception {
+ Wardrobe w = new Wardrobe();
+ w.setDrawers( new ArrayList<Drawer>() );
+ Drawer d = new Drawer();
+ w.getDrawers().add( d );
+ Dress d1 = new Dress();
+ Dress d2 = new Dress();
+ d.setDresses( new ArrayList<Dress>() );
+ d.getDresses().add( d1 );
+ d.getDresses().add( d2 );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( d1 );
+ s.persist( d2 );
+ s.persist( w );
+
+ s.flush();
+ s.clear();
+
+ d = (Drawer) s.get( Drawer.class, d.getId() );
+ assertNotNull( d );
+ assertNotNull( d.getDresses() );
+ List<Dress> result = d.getDresses();
+ assertEquals( 2, result.size() );
+ assertEquals( d2.getId(), result.get( 1 ).getId() );
+ result.remove( d1 );
+ s.flush();
+ d1 = (Dress) s.merge( d1 );
+ result.add( d1 );
+
+ s.flush();
+ s.clear();
+
+ d = (Drawer) s.get( Drawer.class, d.getId() );
+ assertNotNull( d );
+ assertNotNull( d.getDresses() );
+ result = d.getDresses();
+ assertEquals( 2, result.size() );
+ assertEquals( d1.getId(), result.get( 1 ).getId() );
+ s.delete( result.get( 0 ) );
+ s.delete( result.get( 1 ) );
+ s.delete( d );
+ s.flush();
+ tx.rollback();
+ s.close();
+ }
+
+ public void testMapKey() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Software hibernate = new Software();
+ hibernate.setName( "Hibernate" );
+ Version v1 = new Version();
+ v1.setCodeName( "HumbaHumba" );
+ v1.setNumber( "1.0" );
+ v1.setSoftware( hibernate );
+ Version v2 = new Version();
+ v2.setCodeName( "Copacabana" );
+ v2.setNumber( "2.0" );
+ v2.setSoftware( hibernate );
+ Version v4 = new Version();
+ v4.setCodeName( "Dreamland" );
+ v4.setNumber( "4.0" );
+ v4.setSoftware( hibernate );
+ Map<String, Version> link = new HashMap<String, Version>();
+ link.put( v1.getCodeName(), v1 );
+ link.put( v2.getCodeName(), v2 );
+ link.put( v4.getCodeName(), v4 );
+ hibernate.setVersions( link );
+ s.persist( hibernate );
+ s.persist( v1 );
+ s.persist( v2 );
+ s.persist( v4 );
+
+ s.flush();
+ s.clear();
+
+ hibernate = (Software) s.get( Software.class, "Hibernate" );
+ assertEquals( 3, hibernate.getVersions().size() );
+ assertEquals( "1.0", hibernate.getVersions().get( "HumbaHumba"
).getNumber() );
+ assertEquals( "2.0", hibernate.getVersions().get( "Copacabana"
).getNumber() );
+ hibernate.getVersions().remove( v4.getCodeName() );
+
+ s.flush();
+ s.clear();
+
+ hibernate = (Software) s.get( Software.class, "Hibernate" );
+ assertEquals( "So effect on collection changes", 3,
hibernate.getVersions().size() );
+ for ( Version v : hibernate.getVersions().values() ) {
+ s.delete( v );
+ }
+ s.delete( hibernate );
+
+ s.flush();
+
+ tx.rollback();
+ s.close();
+ }
+
+ public void testDefaultMapKey() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ AddressBook book = new AddressBook();
+ book.setOwner( "Emmanuel" );
+ AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
+ AddressEntry heleneEntry = new AddressEntry();
+ heleneEntry.setBook( book );
+ heleneEntry.setCity( "Levallois" );
+ heleneEntry.setStreet( "Louis Blanc" );
+ heleneEntry.setPerson( helene );
+ AddressEntryPk primeMinister = new AddressEntryPk( "Dominique",
"Villepin" );
+ AddressEntry primeMinisterEntry = new AddressEntry();
+ primeMinisterEntry.setBook( book );
+ primeMinisterEntry.setCity( "Paris" );
+ primeMinisterEntry.setStreet( "Hotel Matignon" );
+ primeMinisterEntry.setPerson( primeMinister );
+ book.getEntries().put( helene, heleneEntry );
+ book.getEntries().put( primeMinister, primeMinisterEntry );
+ s.persist( book );
+
+ s.flush();
+ s.clear();
+
+ book = (AddressBook) s.get( AddressBook.class, book.getId() );
+ assertEquals( 2, book.getEntries().size() );
+ assertEquals( heleneEntry.getCity(), book.getEntries().get( helene ).getCity() );
+ AddressEntryPk fake = new AddressEntryPk( "Fake", "Fake" );
+ book.getEntries().put( fake, primeMinisterEntry );
+
+ s.flush();
+ s.clear();
+
+ book = (AddressBook) s.get( AddressBook.class, book.getId() );
+ assertEquals( 2, book.getEntries().size() );
+ assertNull( book.getEntries().get( fake ) );
+ s.delete( book );
+
+ s.flush();
+ tx.rollback();
+ s.close();
+ }
+
+ public void testMapKeyToEntity() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ AlphabeticalDirectory m = new AlphabeticalDirectory();
+ m.setName( "M" );
+ AlphabeticalDirectory v = new AlphabeticalDirectory();
+ v.setName( "V" );
+ s.persist( m );
+ s.persist( v );
+
+ AddressBook book = new AddressBook();
+ book.setOwner( "Emmanuel" );
+ AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
+ AddressEntry heleneEntry = new AddressEntry();
+ heleneEntry.setBook( book );
+ heleneEntry.setCity( "Levallois" );
+ heleneEntry.setStreet( "Louis Blanc" );
+ heleneEntry.setPerson( helene );
+ heleneEntry.setDirectory( m );
+ AddressEntryPk primeMinister = new AddressEntryPk( "Dominique",
"Villepin" );
+ AddressEntry primeMinisterEntry = new AddressEntry();
+ primeMinisterEntry.setBook( book );
+ primeMinisterEntry.setCity( "Paris" );
+ primeMinisterEntry.setStreet( "Hotel Matignon" );
+ primeMinisterEntry.setPerson( primeMinister );
+ primeMinisterEntry.setDirectory( v );
+ book.getEntries().put( helene, heleneEntry );
+ book.getEntries().put( primeMinister, primeMinisterEntry );
+ s.persist( book );
+
+ s.flush();
+ s.clear();
+
+ book = (AddressBook) s.get( AddressBook.class, book.getId() );
+ assertEquals( 2, book.getEntries().size() );
+ assertEquals( heleneEntry.getCity(), book.getEntries().get( helene ).getCity() );
+ assertEquals( "M", book.getEntries().get( helene ).getDirectory().getName()
);
+
+ s.delete( book );
+ tx.rollback();
+ s.close();
+ }
+
+ @RequiresDialect(HSQLDialect.class)
+ public void testComponentSubPropertyMapKey() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ AddressBook book = new AddressBook();
+ book.setOwner( "Emmanuel" );
+ AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
+ AddressEntry heleneEntry = new AddressEntry();
+ heleneEntry.setBook( book );
+ heleneEntry.setCity( "Levallois" );
+ heleneEntry.setStreet( "Louis Blanc" );
+ heleneEntry.setPerson( helene );
+ AddressEntryPk primeMinister = new AddressEntryPk( "Dominique",
"Villepin" );
+ AddressEntry primeMinisterEntry = new AddressEntry();
+ primeMinisterEntry.setBook( book );
+ primeMinisterEntry.setCity( "Paris" );
+ primeMinisterEntry.setStreet( "Hotel Matignon" );
+ primeMinisterEntry.setPerson( primeMinister );
+ book.getEntries().put( helene, heleneEntry );
+ book.getEntries().put( primeMinister, primeMinisterEntry );
+ s.persist( book );
+
+ s.flush();
+ s.clear();
+
+ book = (AddressBook) s.get( AddressBook.class, book.getId() );
+ assertEquals( 2, book.getLastNameEntries().size() );
+ assertEquals( heleneEntry.getCity(), book.getLastNameEntries().get( "Michau"
).getCity() );
+ AddressEntryPk fake = new AddressEntryPk( "Fake", "Fake" );
+ book.getEntries().put( fake, primeMinisterEntry );
+
+ s.flush();
+ s.clear();
+
+ book = (AddressBook) s.get( AddressBook.class, book.getId() );
+ assertEquals( 2, book.getEntries().size() );
+ assertNull( book.getEntries().get( fake ) );
+ s.delete( book );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testMapKeyOnManyToMany() throws Exception {
+ Session s;
+ s = openSession();
+ s.getTransaction().begin();
+ News airplane = new News();
+ airplane.setTitle( "Crash!" );
+ airplane.setDetail( "An airplaned crashed." );
+ s.persist( airplane );
+ Newspaper lemonde = new Newspaper();
+ lemonde.setName( "Lemonde" );
+ lemonde.getNews().put( airplane.getTitle(), airplane );
+ s.persist( lemonde );
+
+ s.flush();
+ s.clear();
+
+ lemonde = (Newspaper) s.get( Newspaper.class, lemonde.getId() );
+ assertEquals( 1, lemonde.getNews().size() );
+ News news = lemonde.getNews().get( airplane.getTitle() );
+ assertNotNull( news );
+ assertEquals( airplane.getTitle(), news.getTitle() );
+ s.delete( lemonde );
+ s.delete( news );
+
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testMapKeyOnManyToManyOnId() throws Exception {
+ Session s;
+ s = openSession();
+ s.getTransaction().begin();
+ News hibernate1 = new News();
+ hibernate1.setTitle( "#1 ORM solution in the Java world" );
+ hibernate1.setDetail( "Well, that's no news ;-)" );
+ s.persist( hibernate1 );
+ PressReleaseAgency schwartz = new PressReleaseAgency();
+ schwartz.setName( "Schwartz" );
+ schwartz.getProvidedNews().put( hibernate1.getId(), hibernate1 );
+ s.persist( schwartz );
+
+ s.flush();
+ s.clear();
+
+ schwartz = (PressReleaseAgency) s.get( PressReleaseAgency.class, schwartz.getId() );
+ assertEquals( 1, schwartz.getProvidedNews().size() );
+ News news = schwartz.getProvidedNews().get( hibernate1.getId() );
+ assertNotNull( news );
+ assertEquals( hibernate1.getTitle(), news.getTitle() );
+ s.delete( schwartz );
+ s.delete( news );
+
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testMapKeyAndIdClass() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Painter picasso = new Painter();
+ Painting laVie = new Painting( "La Vie", "Picasso", 50, 20 );
+ picasso.getPaintings().put( "La Vie", laVie );
+ Painting famille = new Painting( "La Famille du Saltimbanque",
"Picasso", 50, 20 );
+ picasso.getPaintings().put( "La Famille du Saltimbanque", famille );
+ s.persist( picasso );
+
+ s.flush();
+ s.clear();
+
+ picasso = (Painter) s.get( Painter.class, picasso.getId() );
+ Painting painting = picasso.getPaintings().get( famille.getName() );
+ assertNotNull( painting );
+ assertEquals( painting.getName(), famille.getName() );
+ s.delete( picasso );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testRealMap() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Atmosphere atm = new Atmosphere();
+ Atmosphere atm2 = new Atmosphere();
+ GasKey key = new GasKey();
+ key.setName( "O2" );
+ Gas o2 = new Gas();
+ o2.name = "oxygen";
+ atm.gases.put( "100%", o2 );
+ atm.gasesPerKey.put( key, o2 );
+ atm2.gases.put( "100%", o2 );
+ atm2.gasesPerKey.put( key, o2 );
+ s.persist( key );
+ s.persist( atm );
+ s.persist( atm2 );
+
+ s.flush();
+ s.clear();
+
+ atm = (Atmosphere) s.get( Atmosphere.class, atm.id );
+ key = (GasKey) s.get( GasKey.class, key.getName() );
+ assertEquals( 1, atm.gases.size() );
+ assertEquals( o2.name, atm.gases.get( "100%" ).name );
+ assertEquals( o2.name, atm.gasesPerKey.get( key ).name );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testMapKeyEntityEntity() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ AddressBook book = new AddressBook();
+ s.persist( book );
+ AddressEntry entry = new AddressEntry();
+ entry.setCity( "Atlanta");
+ AddressEntryPk pk = new AddressEntryPk("Coca", "Cola" );
+ entry.setPerson( pk );
+ entry.setBook( book );
+ AlphabeticalDirectory ad = new AlphabeticalDirectory();
+ ad.setName( "C");
+ s.persist( ad );
+ entry.setDirectory( ad );
+ s.persist( entry );
+ book.getDirectoryEntries().put( ad, entry );
+
+ s.flush();
+ s.clear();
+
+ book = (AddressBook) s.get( AddressBook.class, book.getId() );
+ assertEquals( 1, book.getDirectoryEntries().size() );
+ assertEquals( "C",
book.getDirectoryEntries().keySet().iterator().next().getName() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testEntityKeyElementTarget() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Atmosphere atm = new Atmosphere();
+ Gas o2 = new Gas();
+ o2.name = "oxygen";
+ atm.composition.put( o2, 94.3 );
+ s.persist( o2 );
+ s.persist( atm );
+
+ s.flush();
+ s.clear();
+
+ atm = (Atmosphere) s.get( Atmosphere.class, atm.id );
+ assertTrue( ! Hibernate.isInitialized( atm.composition ) );
+ assertEquals( 1, atm.composition.size() );
+ assertEquals( o2.name, atm.composition.keySet().iterator().next().name );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testSortedMap() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Training training = new Training();
+ Trainee trainee = new Trainee();
+ trainee.setName( "Jim" );
+ Trainee trainee2 = new Trainee();
+ trainee2.setName( "Emmanuel" );
+ s.persist( trainee );
+ s.persist( trainee2 );
+ training.getTrainees().put( "Jim", trainee );
+ training.getTrainees().put( "Emmanuel", trainee2 );
+ s.persist( training );
+
+ s.flush();
+ s.clear();
+
+ training = (Training) s.get( Training.class, training.getId() );
+ assertEquals( "Emmanuel", training.getTrainees().firstKey() );
+ assertEquals( "Jim", training.getTrainees().lastKey() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testMapKeyLoad() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Software hibernate = new Software();
+ hibernate.setName( "Hibernate" );
+ Version v1 = new Version();
+ v1.setCodeName( "HumbaHumba" );
+ v1.setNumber( "1.0" );
+ v1.setSoftware( hibernate );
+ hibernate.addVersion( v1 );
+ s.persist( hibernate );
+ s.persist( v1 );
+
+ s.flush();
+ s.clear();
+
+ hibernate = (Software) s.get( Software.class, "Hibernate" );
+ assertEquals(1, hibernate.getVersions().size() );
+ Version v2 = new Version();
+ v2.setCodeName( "HumbaHumba2" );
+ v2.setNumber( "2.0" );
+ v2.setSoftware( hibernate );
+ hibernate.addVersion( v2 );
+ assertEquals( "One loaded persisted version, and one just added", 2,
hibernate.getVersions().size() );
+
+ s.flush();
+ s.clear();
+
+ hibernate = (Software) s.get( Software.class, "Hibernate" );
+ for ( Version v : hibernate.getVersions().values() ) {
+ s.delete( v );
+ }
+ s.delete( hibernate );
+ tx.rollback();
+ s.close();
+ }
+
+
+ public IndexedCollectionTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Wardrobe.class,
+ Drawer.class,
+ Dress.class,
+ Software.class,
+ Version.class,
+ AddressBook.class,
+ AddressEntry.class,
+ AddressEntryPk.class, //should be silently ignored
+ Newspaper.class,
+ News.class,
+ PressReleaseAgency.class,
+ Painter.class,
+ Painting.class,
+ Atmosphere.class,
+ Gas.class,
+ AlphabeticalDirectory.class,
+ GasKey.class,
+ Trainee.class,
+ Training.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/MapKeyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/MapKeyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/MapKeyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: MapKeyTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MapKeyTest extends TestCase {
+
+ public void testMapKeyOnEmbeddedId() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Generation c = new Generation();
+ c.setAge( "a" );
+ c.setCulture( "b" );
+ GenerationGroup r = new GenerationGroup();
+ r.setGeneration( c );
+ s.persist( r );
+ GenerationUser m = new GenerationUser();
+ s.persist( m );
+ m.getRef().put( c, r );
+ s.flush();
+ s.clear();
+
+ m = (GenerationUser) s.get( GenerationUser.class, m.getId() );
+ assertEquals( "a", m.getRef().keySet().iterator().next().getAge() );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ GenerationUser.class,
+ GenerationGroup.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/News.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/News.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/News.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: News.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class News {
+ private Integer id;
+ private String title;
+ private String detail;
+
+ @Id
+ @GeneratedValue
+ @Column(name = "news_id")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getDetail() {
+ return detail;
+ }
+
+ public void setDetail(String detail) {
+ this.detail = detail;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Newspaper.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Newspaper.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Newspaper.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+//$Id: Newspaper.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Newspaper {
+ private Integer id;
+ private String name;
+ private Map<String, News> news = new HashMap<String, News>();
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToMany
+ @MapKey(name = "title")
+ public Map<String, News> getNews() {
+ return news;
+ }
+
+ public void setNews(Map<String, News> news) {
+ this.news = news;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painter.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painter.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painter.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+//$Id: Painter.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Painter {
+ private Integer id;
+ private Map<String, Painting> paintings = new HashMap<String, Painting>();
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @OneToMany(cascade = {CascadeType.ALL})
+ @MapKey(name = "name")
+ @JoinColumn
+ public Map<String, Painting> getPaintings() {
+ return paintings;
+ }
+
+ public void setPaintings(Map<String, Painting> paintings) {
+ this.paintings = paintings;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painting.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painting.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Painting.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,82 @@
+//$Id: Painting.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(PaintingPk.class)
+public class Painting {
+
+ private int sizeX;
+ private int sizeY;
+ private String name;
+ private String painter;
+
+ public Painting() {
+ }
+
+ public Painting(String name, String painter, int sizeX, int sizeY) {
+ this.name = name;
+ this.painter = painter;
+ this.sizeX = sizeX;
+ this.sizeY = sizeY;
+ }
+
+ @Id
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Id
+ public String getPainter() {
+ return painter;
+ }
+
+ public void setPainter(String painter) {
+ this.painter = painter;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final PaintingPk that = (PaintingPk) o;
+
+ if ( !name.equals( that.getName() ) ) return false;
+ if ( !painter.equals( that.getPainter() ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = name.hashCode();
+ result = 29 * result + painter.hashCode();
+ return result;
+ }
+
+ public int getSizeX() {
+ return sizeX;
+ }
+
+ public void setSizeX(int sizeX) {
+ this.sizeX = sizeX;
+ }
+
+ public int getSizeY() {
+ return sizeY;
+ }
+
+ public void setSizeY(int sizeY) {
+ this.sizeY = sizeY;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PaintingPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PaintingPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PaintingPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: PaintingPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class PaintingPk implements Serializable {
+ private String name;
+ private String painter;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPainter() {
+ return painter;
+ }
+
+ public void setPainter(String painter) {
+ this.painter = painter;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final PaintingPk that = (PaintingPk) o;
+
+ if ( !name.equals( that.name ) ) return false;
+ if ( !painter.equals( that.painter ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = name.hashCode();
+ result = 29 * result + painter.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: PressReleaseAgency.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PressReleaseAgency {
+ private Integer id;
+ private String name;
+ private Map<Integer, News> providedNews = new HashMap<Integer, News>();
+
+ @Id
+ @GeneratedValue
+ @Column(name = "PressReleaseAgency_id")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToMany
+ @JoinTable(joinColumns = @JoinColumn(name = "PressReleaseAgency_id"),
+ inverseJoinColumns = @JoinColumn(name = "News_id"))
+ @MapKey
+ public Map<Integer, News> getProvidedNews() {
+ return providedNews;
+ }
+
+ public void setProvidedNews(Map<Integer, News> providedNews) {
+ this.providedNews = providedNews;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Software.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Software.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Software.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,41 @@
+//$Id: Software.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Software {
+ private String name;
+ private Map<String, Version> versions = new HashMap<String, Version>();
+
+ @Id
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "software")
+ @MapKey(name = "codeName")
+ public Map<String, Version> getVersions() {
+ return versions;
+ }
+
+ public void setVersions(Map<String, Version> versions) {
+ this.versions = versions;
+ }
+
+ public void addVersion(Version version) {
+ this.versions.put(version.getCodeName(), version);
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Trainee.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Trainee.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Trainee.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: Trainee.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Trainee {
+ @Id @GeneratedValue private Long id;
+ private String name;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Training.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Training.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Training.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: Training.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.SortedMap;
+import java.util.TreeMap;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.SortType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Training {
+ @Id @GeneratedValue private Long id;
+ @Sort(type= SortType.NATURAL)
+ @MapKey(name="name") @ManyToMany SortedMap<String, Trainee> trainees =
new TreeMap<String, Trainee>();
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public SortedMap<String, Trainee> getTrainees() {
+ return trainees;
+ }
+
+ public void setTrainees(SortedMap<String, Trainee> trainees) {
+ this.trainees = trainees;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Version.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Version.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Version.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+//$Id: Version.java 15049 2008-08-13 15:32:32Z epbernard $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_version")
+public class Version {
+ private Integer id;
+ private String codeName;
+ private String number;
+ private Software software;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(name="`code_name`")
+ public String getCodeName() {
+ return codeName;
+ }
+
+ public void setCodeName(String codeName) {
+ this.codeName = codeName;
+ }
+
+ @Column(name="version_nbr")
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ @ManyToOne
+ public Software getSoftware() {
+ return software;
+ }
+
+ public void setSoftware(Software software) {
+ this.software = software;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Wardrobe.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Wardrobe.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/indexcoll/Wardrobe.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: Wardrobe.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Wardrobe {
+
+ private Long id;
+ private List<Drawer> drawers;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * unidirectional one to many list with non null foreign key (mapping
+ * not recommended).
+ */
+ @OneToMany(cascade = CascadeType.ALL)
+ @IndexColumn(name = "drawer_position", base = 1)
+ @JoinColumn(name = "wardrobe_id", nullable = false)
+ public List<Drawer> getDrawers() {
+ return drawers;
+ }
+
+ public void setDrawers(List<Drawer> drawers) {
+ this.drawers = drawers;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Apple.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Apple.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Apple.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: Apple.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Apple extends Fruit {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Carrot.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Carrot.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Carrot.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Carrot.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@PrimaryKeyJoinColumns(
+ {@PrimaryKeyJoinColumn(name = "carrot_farmer", referencedColumnName =
"farmer"),
+ @PrimaryKeyJoinColumn(name = "harvest", referencedColumnName =
"harvestDate")
+ })
+@OnDelete(action = OnDeleteAction.CASCADE)
+public class Carrot extends Vegetable {
+ private int length;
+
+ public int getLength() {
+ return length;
+ }
+
+ public void setLength(int length) {
+ this.length = length;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Fruit.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Fruit.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Fruit.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: Fruit.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Fruit {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/SubclassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/SubclassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/SubclassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,170 @@
+//$Id: SubclassTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance;
+
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.A320;
+import org.hibernate.test.annotations.A320b;
+import org.hibernate.test.annotations.Plane;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.inheritance.singletable.Funk;
+import org.hibernate.test.annotations.inheritance.singletable.Music;
+import org.hibernate.test.annotations.inheritance.singletable.Noise;
+import org.hibernate.test.annotations.inheritance.singletable.Rock;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SubclassTest extends TestCase {
+
+ public SubclassTest(String x) {
+ super( x );
+ }
+
+ public void testPolymorphism() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Plane p = new Plane();
+ p.setNbrOfSeats( 10 );
+ A320 a = new A320();
+ a.setJavaEmbeddedVersion( "5.0" );
+ a.setNbrOfSeats( 300 );
+ s.persist( a );
+ s.persist( p );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from " + A320.class.getName() );
+ List a320s = q.list();
+ assertNotNull( a320s );
+ assertEquals( 1, a320s.size() );
+ assertTrue( a320s.get( 0 ) instanceof A320 );
+ assertEquals( "5.0", ( (A320) a320s.get( 0 ) ).getJavaEmbeddedVersion() );
+ q = s.createQuery( "from " + Plane.class.getName() );
+ List planes = q.list();
+ assertNotNull( planes );
+ assertEquals( 2, planes.size() );
+ tx.commit();
+ s.close();
+ }
+
+ public void test2ndLevelSubClass() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ A320b a = new A320b();
+ a.setJavaEmbeddedVersion( "Elephant" );
+ a.setNbrOfSeats( 300 );
+ s.persist( a );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from " + A320.class.getName() + " as a where
a.javaEmbeddedVersion = :version" );
+ q.setString( "version", "Elephant" );
+ List a320s = q.list();
+ assertNotNull( a320s );
+ assertEquals( 1, a320s.size() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEmbeddedSuperclass() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Plane p = new Plane();
+ p.setAlive( true ); //sic
+ p.setAltitude( 10000 );
+ p.setMetricAltitude( 3000 );
+ p.setNbrOfSeats( 150 );
+ p.setSerial( "0123456789" );
+ s.persist( p );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ p = (Plane) s.get( Plane.class, p.getId() );
+ assertNotNull( p );
+ assertEquals( true, p.isAlive() );
+ assertEquals( 150, p.getNbrOfSeats() );
+ assertEquals( 10000, p.getAltitude() );
+ assertEquals( "0123456789", p.getSerial() );
+ assertFalse( 3000 == p.getMetricAltitude() );
+ s.delete( p );
+ tx.commit();
+ s.close();
+ }
+
+ public void testFormula() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Rock guns = new Rock();
+ guns.setAvgBeat( 90 );
+ guns.setType( 2 );
+ Noise white = new Noise();
+ white.setAvgBeat( 0 );
+ white.setType( null );
+
+ s.persist( guns );
+ s.persist( white );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ List result = s.createCriteria( Noise.class ).list();
+ assertNotNull( result );
+ assertEquals( 1, result.size() );
+ white = (Noise) result.get( 0 );
+ assertNull( white.getType() );
+ s.delete( white );
+ result = s.createCriteria( Rock.class ).list();
+ assertEquals( 1, result.size() );
+ s.delete( result.get( 0 ) );
+ result = s.createCriteria( Funk.class ).list();
+ assertEquals( 0, result.size() );
+
+ tx.commit();
+ s.close();
+ }
+
+ private void checkClassType(Fruit fruitToTest, Fruit f, Apple a) {
+ if ( fruitToTest.getId().equals( f.getId() ) ) {
+ assertFalse( fruitToTest instanceof Apple );
+ }
+ else if ( fruitToTest.getId().equals( a.getId() ) ) {
+ assertTrue( fruitToTest instanceof Apple );
+ }
+ else {
+ fail( "Result does not contains the previously inserted elements" );
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ A320b.class, //subclasses should be properly reordered
+ Plane.class,
+ A320.class,
+ Fruit.class,
+ //FlyingObject.class, //had to declare embedded superclasses
+ //Thing.class,
+ Apple.class,
+ Music.class,
+ Rock.class,
+ Funk.class,
+ Noise.class
+ };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Tomato.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Tomato.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Tomato.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Tomato.java 15056 2008-08-13 18:15:05Z epbernard $
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+//FIXME HBX-55 default for composite PK does not work yet
+//FIXME Tomato is a fruit
+@Entity()
+@Inheritance(
+ strategy = InheritanceType.JOINED
+)
+@OnDelete(action = OnDeleteAction.CASCADE)
+public class Tomato extends Vegetable {
+ private int size;
+
+ @Column(name="tom_size")
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Vegetable.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Vegetable.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/Vegetable.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id: Vegetable.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity()
+@Inheritance(
+ strategy = InheritanceType.JOINED
+)
+public class Vegetable {
+ private VegetablePk id;
+ private long priceInCent;
+
+ @Id
+ public VegetablePk getId() {
+ return id;
+ }
+
+ public void setId(VegetablePk id) {
+ this.id = id;
+ }
+
+ public long getPriceInCent() {
+ return priceInCent;
+ }
+
+ public void setPriceInCent(long priceInCent) {
+ this.priceInCent = priceInCent;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Vegetable ) ) return false;
+
+ final Vegetable vegetable = (Vegetable) o;
+
+ if ( !id.equals( vegetable.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/VegetablePk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/VegetablePk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/VegetablePk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: VegetablePk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class VegetablePk implements Serializable {
+ private String farmer;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof VegetablePk ) ) return false;
+
+ final VegetablePk vegetablePk = (VegetablePk) o;
+
+ if ( !farmer.equals( vegetablePk.farmer ) ) return false;
+ if ( !harvestDate.equals( vegetablePk.harvestDate ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = farmer.hashCode();
+ result = 29 * result + harvestDate.hashCode();
+ return result;
+ }
+
+ public String getFarmer() {
+ return farmer;
+ }
+
+ public void setFarmer(String farmer) {
+ this.farmer = farmer;
+ }
+
+ public String getHarvestDate() {
+ return harvestDate;
+ }
+
+ public void setHarvestDate(String harvestDate) {
+ this.harvestDate = harvestDate;
+ }
+
+ private String harvestDate;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Alarm.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Alarm.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Alarm.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: Alarm.java 15074 2008-08-14 17:38:00Z epbernard $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+
+@Entity
+@DiscriminatorValue("AlarmT")
+public class Alarm extends EventInformation {
+
+ protected EventInformation eventInfo;
+
+ @OneToOne
+ @JoinColumns({@JoinColumn(name = "EVENTINFO_NOTIFICATIONID",
+ referencedColumnName = "NOTIFICATIONID")})
+ public EventInformation getEventInfo() {
+ return eventInfo;
+ }
+
+ public void setEventInfo(EventInformation value) {
+ this.eventInfo = value;
+ }
+
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ String eventId = ( getEventInfo() != null ?
+ getEventInfo().getNotificationId() : null );
+ sb.append(
+ "AlarmT: id = " + getNotificationId() + "\t" +
+ "has event id = " + eventId
+ );
+ return sb.toString();
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping
package="org.hibernate.test.annotations.inheritance.joined">
+
+ <class name="Parent">
+ <id name="id">
+ <generator class="native"/>
+ </id>
+ <set name="financialAssets" fetch="join"
cascade="refresh" inverse="true">
+ <key column="PARENT_ID"/>
+ <one-to-many class="FinancialAsset"/>
+ </set>
+ <set name="propertyAssets" fetch="join"
cascade="refresh" inverse="true">
+ <key column="PARENT_ID"/>
+ <one-to-many class="PropertyAsset"/>
+ </set>
+ </class>
+ <class name="Asset">
+ <id name="id">
+ <generator class="native"/>
+ </id>
+ <many-to-one name="parent" column="PARENT_ID"
property-ref="parent"/>
+ <joined-subclass name="FinancialAsset">
+ <key column="ID"/>
+ <property name="price"/>
+ </joined-subclass>
+ <joined-subclass name="PropertyAsset">
+ <key column="ID"/>
+ <property name="price"/>
+ </joined-subclass>
+ </class>
+
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Asset.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,41 @@
+//$Id: Asset.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@Table(name = "TBLASSET")
+public class Asset {
+ private Integer id;
+
+ private Parent parent = null;
+
+ @Id @GeneratedValue public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToOne(targetEntity = Parent.class)
+ @JoinColumn(name = "PARENTID")
+ public Parent getParent() {
+ return parent;
+ }
+
+ public void setParent(Parent parent) {
+ this.parent = parent;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Clothing.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Clothing.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Clothing.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+//$Id: Clothing.java 15075 2008-08-14 17:43:43Z epbernard $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+public abstract class Clothing {
+ private long id;
+ private int size;
+ private String color;
+
+ @Id
+ @GeneratedValue
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ @Column(name = "cloth_size")
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Document.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Document.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Document.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Document.java 16296 2009-04-10 20:21:48Z gbadner $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@ForeignKey(name = "FK_DOCU_FILE")
+public class Document extends File {
+ @Column(nullable = false, name="xsize")
+ private int size;
+
+ Document() {
+ }
+
+ Document(String name, int size) {
+ super( name );
+ this.size = size;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Document.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/EventInformation.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/EventInformation.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/EventInformation.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: EventInformation.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@DiscriminatorColumn(name = "DTYPE", discriminatorType =
DiscriminatorType.STRING, length = 80)
+@DiscriminatorValue("EventInformationT")
+public class EventInformation implements java.io.Serializable {
+
+
+ protected String notificationId;
+
+ @Id
+ public String getNotificationId() {
+ return notificationId;
+ }
+
+ public void setNotificationId(String value) {
+ this.notificationId = value;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append( "EventInformationT: id = " + getNotificationId() );
+ return sb.toString();
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/File.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/File.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/File.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+//$Id: File.java 15050 2008-08-13 15:34:39Z epbernard $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.ManyToOne;
+import javax.persistence.Column;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@Table(name="joined_file")
+public abstract class File {
+ @Id @Column(name="filename")
+ private String name;
+ @ManyToOne
+ private Folder parent;
+
+ File() {
+ }
+
+ public File(String name) {
+ this.name = name;
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String id) {
+ this.name = id;
+ }
+
+ public Folder getParent() {
+ return parent;
+ }
+
+ public void setParent(Folder parent) {
+ this.parent = parent;
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/File.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: FinancialAsset.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class FinancialAsset extends Asset {
+ private double price;
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Folder.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Folder.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Folder.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: Folder.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Folder extends File {
+ @OneToMany(mappedBy = "parent")
+ private Set<File> children = new HashSet<File>();
+
+ Folder() {
+ }
+
+ public Folder(String name) {
+ super( name );
+ }
+
+ public Set<File> getChildren() {
+ return children;
+ }
+
+ public void setChildren(Set children) {
+ this.children = children;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Folder.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: JoinedSubclassAndSecondaryTable.java 14736 2008-06-04 14:23:42Z hardy.ferentschik
$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinedSubclassAndSecondaryTable extends TestCase {
+
+ public void testSecondaryTableAndJoined() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ SwimmingPool sp = new SwimmingPool();
+ sp.setAddress( "Park Avenue" );
+ s.persist( sp );
+ tx.rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Pool.class,
+ SwimmingPool.class
+ };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,178 @@
+//$Id: JoinedSubclassTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinedSubclassTest extends TestCase {
+
+ public JoinedSubclassTest(String x) {
+ super( x );
+ }
+
+ public void testDefault() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ File doc = new Document( "Enron Stuff To Shred", 1000 );
+ Folder folder = new Folder( "Enron" );
+ s.persist( doc );
+ s.persist( folder );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ List result = s.createCriteria( File.class ).list();
+ assertNotNull( result );
+ assertEquals( 2, result.size() );
+ File f2 = (File) result.get( 0 );
+ checkClassType( f2, doc, folder );
+ f2 = (File) result.get( 1 );
+ checkClassType( f2, doc, folder );
+ s.delete( result.get( 0 ) );
+ s.delete( result.get( 1 ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOneOnAbstract() throws Exception {
+ Folder f = new Folder();
+ f.setName( "data" );
+ ProgramExecution remove = new ProgramExecution();
+ remove.setAction( "remove" );
+ remove.setAppliesOn( f );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( f );
+ s.persist( remove );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ remove = (ProgramExecution) s.get( ProgramExecution.class, remove.getId() );
+ assertNotNull( remove );
+ assertNotNull( remove.getAppliesOn().getName() );
+ s.delete( remove );
+ s.delete( remove.getAppliesOn() );
+ tx.commit();
+ s.close();
+
+ }
+
+ private void checkClassType(File fruitToTest, File f, Folder a) {
+ if ( fruitToTest.getName().equals( f.getName() ) ) {
+ assertFalse( fruitToTest instanceof Folder );
+ }
+ else if ( fruitToTest.getName().equals( a.getName() ) ) {
+ assertTrue( fruitToTest instanceof Folder );
+ }
+ else {
+ fail( "Result does not contains the previously inserted elements" );
+ }
+ }
+
+ public void testJoinedAbstractClass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ s.getTransaction().begin();
+ Sweater sw = new Sweater();
+ sw.setColor( "Black" );
+ sw.setSize( 2 );
+ sw.setSweat( true );
+ s.persist( sw );
+ s.getTransaction().commit();
+ s.clear();
+
+ s = openSession();
+ s.getTransaction().begin();
+ sw = (Sweater) s.get( Sweater.class, sw.getId() );
+ s.delete( sw );
+ s.getTransaction().commit();
+ s.close();
+ }
+
+ public void testInheritance() throws Exception {
+ Session session = openSession();
+ Transaction transaction = session.beginTransaction();
+ String eventPK = "event1";
+ EventInformation event = (EventInformation) session.get( EventInformation.class,
eventPK );
+ if ( event == null ) {
+ event = new EventInformation();
+ event.setNotificationId( eventPK );
+ session.persist( event );
+ }
+ String alarmPK = "alarm1";
+ Alarm alarm = (Alarm) session.get( Alarm.class, alarmPK );
+ if ( alarm == null ) {
+ alarm = new Alarm();
+ alarm.setNotificationId( alarmPK );
+ alarm.setEventInfo( event );
+ session.persist( alarm );
+ }
+ transaction.commit();
+ session.close();
+ }
+
+// public void testManyToOneAndJoin() throws Exception {
+// Session session = openSession();
+// Transaction transaction = session.beginTransaction();
+// Parent parent = new Parent();
+// session.persist( parent );
+// PropertyAsset property = new PropertyAsset();
+// property.setParent( parent );
+// property.setPrice( 230000d );
+// FinancialAsset financial = new FinancialAsset();
+// financial.setParent( parent );
+// financial.setPrice( 230000d );
+// session.persist( financial );
+// session.persist( property );
+// session.flush();
+// session.clear();
+// parent = (Parent) session.get( Parent.class, parent.getId() );
+// assertNotNull( parent );
+// assertEquals( 1, parent.getFinancialAssets().size() );
+// assertEquals( 1, parent.getPropertyAssets().size() );
+// assertEquals( property.getId(), parent.getPropertyAssets().iterator().next() );
+// transaction.rollback();
+// session.close();
+// }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[] {
+ //"org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml"
+ };
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ File.class,
+ Folder.class,
+ Document.class,
+ SymbolicLink.class,
+ ProgramExecution.class,
+ Clothing.class,
+ Sweater.class,
+ EventInformation.class,
+ Alarm.class,
+ //Asset.class,
+ //Parent.class,
+ //PropertyAsset.class,
+ //FinancialAsset.class
+ };
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Parent.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Parent.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Parent.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: Parent.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "Parent")
+public class Parent {
+ private Integer id;
+ private Set propertyAssets = new HashSet();
+ private Set financialAssets = new HashSet();
+
+ @Id @GeneratedValue public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, mappedBy =
"parent", targetEntity = PropertyAsset.class)
+ public Set getPropertyAssets() {
+ return this.propertyAssets;
+ }
+
+ public void setPropertyAssets(Set propertyAssets) {
+ this.propertyAssets = propertyAssets;
+ }
+
+ @OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, mappedBy =
"parent", targetEntity = FinancialAsset.class)
+ public Set getFinancialAssets() {
+ return this.financialAssets;
+ }
+
+ public void setFinancialAssets(Set financialAssets) {
+ this.financialAssets = financialAssets;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Pool.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Pool.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Pool.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: Pool.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@SecondaryTable(name="POOL_ADDRESS")
+public class Pool {
+ @Id @GeneratedValue private Integer id;
+ @Column(table = "POOL_ADDRESS")
+ private String address;
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: ProgramExecution.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class ProgramExecution {
+ @Id
+ @GeneratedValue
+ private Integer id;
+ private String action;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private File appliesOn;
+
+
+ public File getAppliesOn() {
+ return appliesOn;
+ }
+
+ public void setAppliesOn(File appliesOn) {
+ this.appliesOn = appliesOn;
+ }
+
+ public String getAction() {
+ return action;
+ }
+
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: PropertyAsset.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PropertyAsset extends Asset {
+ private double price;
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Sweater.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Sweater.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/Sweater.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Sweater.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@PrimaryKeyJoinColumn(name = "clothing_id")
+public class Sweater extends Clothing {
+ private boolean isSweat;
+
+ public boolean isSweat() {
+ return isSweat;
+ }
+
+ public void setSweat(boolean sweat) {
+ isSweat = sweat;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: SwimmingPool.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class SwimmingPool extends Pool {
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: SymbolicLink.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class SymbolicLink extends File {
+
+ @ManyToOne(optional = false)
+ File target;
+
+ SymbolicLink() {
+ }
+
+ public SymbolicLink(File target) {
+ this.target = target;
+ }
+
+ public File getTarget() {
+ return target;
+ }
+
+ public void setTarget(File target) {
+ this.target = target;
+ }
+
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Document.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Document.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Document.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,36 @@
+//$Id: Document.java 15056 2008-08-13 18:15:05Z epbernard $
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("D")
+@SecondaryTable(name = "DocumentMixed")
+@Table(name="Document_Wrong") //illegal use, a warn is raised
+public class Document extends File {
+ private int size;
+
+ Document() {
+ }
+
+ Document(String name, int size) {
+ super( name );
+ this.size = size;
+ }
+
+ @Column(table = "DocumentMixed", name="doc_size", nullable = false)
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Document.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/File.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/File.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/File.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: File.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+@Table(name = "FileMixed")
+@SecondaryTable(name = "FileFolderMixed")
+@DiscriminatorColumn(length = 1)
+public abstract class File {
+ private String name;
+ private Folder parent;
+
+ File() {
+ }
+
+ public File(String name) {
+ this.name = name;
+ }
+
+ @Id
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String id) {
+ this.name = id;
+ }
+
+ @ManyToOne
+ @JoinColumn(table = "FileFolderMixed")
+ public Folder getParent() {
+ return parent;
+ }
+
+ public void setParent(Folder parent) {
+ this.parent = parent;
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/File.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Folder.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Folder.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Folder.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Folder.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("F")
+public class Folder extends File {
+ private Set<File> children = new HashSet<File>();
+
+ Folder() {
+ }
+
+ public Folder(String name) {
+ super( name );
+ }
+
+ @OneToMany(mappedBy = "parent")
+ public Set<File> getChildren() {
+ return children;
+ }
+
+ public void setChildren(Set children) {
+ this.children = children;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/Folder.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,76 @@
+//$Id: SubclassTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.exception.SQLGrammarException;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SubclassTest extends TestCase {
+
+ public SubclassTest(String x) {
+ super( x );
+ }
+
+ public void testDefault() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ File doc = new Document( "Enron Stuff To Shred", 1000 );
+ Folder folder = new Folder( "Enron" );
+ s.persist( doc );
+ s.persist( folder );
+ try {
+ tx.commit();
+ }
+ catch (SQLGrammarException e) {
+ System.err.println( e.getSQLException().getNextException() );
+ }
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ List result = s.createCriteria( File.class ).list();
+ assertNotNull( result );
+ assertEquals( 2, result.size() );
+ File f2 = (File) result.get( 0 );
+ checkClassType( f2, doc, folder );
+ f2 = (File) result.get( 1 );
+ checkClassType( f2, doc, folder );
+ s.delete( result.get( 0 ) );
+ s.delete( result.get( 1 ) );
+ tx.commit();
+ s.close();
+ }
+
+ private void checkClassType(File fruitToTest, File f, Folder a) {
+ if ( fruitToTest.getName().equals( f.getName() ) ) {
+ assertFalse( fruitToTest instanceof Folder );
+ }
+ else if ( fruitToTest.getName().equals( a.getName() ) ) {
+ assertTrue( fruitToTest instanceof Folder );
+ }
+ else {
+ fail( "Result does not contains the previously inserted elements" );
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ File.class,
+ Folder.class,
+ Document.class,
+ SymbolicLink.class
+ };
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: SymbolicLink.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SecondaryTable;
+
+@Entity
+@DiscriminatorValue("L")
+@SecondaryTable(name = "SymbolicLinkMixed")
+public class SymbolicLink extends File {
+
+ File target;
+
+ SymbolicLink() {
+ }
+
+ public SymbolicLink(File target) {
+ this.target = target;
+ }
+
+ @ManyToOne(optional = false)
+ @JoinColumn(table = "SymbolicLinkMixed")
+ public File getTarget() {
+ return target;
+ }
+
+ public void setTarget(File target) {
+ this.target = target;
+ }
+
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Building.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Building.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Building.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+//$Id: Building.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.ForceDiscriminator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorColumn(name = "discriminator_disc")
+@ForceDiscriminator
+@DiscriminatorValue("B")
+public class Building {
+ @Id
+ @GeneratedValue
+ @Column(name = "discriminator_id")
+ private Integer id;
+ @Column(name = "discriminator_street")
+ private String street;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getStreet() {
+ return street;
+ }
+
+ public void setStreet(String street) {
+ this.street = street;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Funk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Funk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Funk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Funk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("1")
+public class Funk extends Music {
+ private int starred;
+
+ public int getStarred() {
+ return starred;
+ }
+
+ public void setStarred(int starred) {
+ this.starred = starred;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/House.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/House.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/House.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$Id: House.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("H")
+public class House extends Building {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Music.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Music.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Music.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,53 @@
+//$Id: Music.java 16303 2009-04-11 04:42:16Z gbadner $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.DiscriminatorFormula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)DiscriminatorColumn(discriminatorType=DiscriminatorType.INTEGER)
+@DiscriminatorFormula("case when zik_type is null then 0 else zik_type end")
+@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"avgBeat",
"starred"} ))
+public abstract class Music {
+ private Integer id;
+ private int avgBeat;
+ private Integer type;
+
+ @Column(name = "zik_type")
+ public Integer getType() {
+ return type;
+ }
+
+ public void setType(Integer type) {
+ this.type = type;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public int getAvgBeat() {
+ return avgBeat;
+ }
+
+ public void setAvgBeat(int avgBeat) {
+ this.avgBeat = avgBeat;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Noise.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Noise.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Noise.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$Id: Noise.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("0")
+public class Noise extends Music {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: PaperTrash.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PaperTrash extends Trash {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Rock.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Rock.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Rock.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$Id: Rock.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("2")
+public class Rock extends Music {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Trash.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Trash.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/singletable/Trash.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+//$Id: Trash.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER)
+public class Trash {
+ @Id
+ @GeneratedValue
+ private Integer id;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Document.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Document.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Document.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,32 @@
+//$Id: Document.java 16293 2009-04-10 19:17:45Z gbadner $
+package org.hibernate.test.annotations.inheritance.union;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "DocumentUnion")
+public class Document extends File {
+ private int size;
+
+ Document() {
+ }
+
+ Document(String name, int size) {
+ super( name );
+ this.size = size;
+ }
+
+ @Column(name="xsize")
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Document.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/File.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/File.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/File.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: File.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.union;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public abstract class File {
+ private String name;
+ private Folder parent;
+
+ File() {
+ }
+
+ public File(String name) {
+ this.name = name;
+ }
+
+ @Id
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String id) {
+ this.name = id;
+ }
+
+ @ManyToOne
+ public Folder getParent() {
+ return parent;
+ }
+
+ public void setParent(Folder parent) {
+ this.parent = parent;
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/File.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Folder.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Folder.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Folder.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Folder.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.union;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "FolderUnion")
+public class Folder extends File {
+ private Set<File> children = new HashSet<File>();
+
+ Folder() {
+ }
+
+ public Folder(String name) {
+ super( name );
+ }
+
+ @OneToMany(mappedBy = "parent")
+ public Set<File> getChildren() {
+ return children;
+ }
+
+ public void setChildren(Set children) {
+ this.children = children;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/Folder.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SubclassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,68 @@
+//$Id: SubclassTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.union;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SubclassTest extends TestCase {
+
+ public SubclassTest(String x) {
+ super( x );
+ }
+
+ public void testDefault() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ File doc = new Document( "Enron Stuff To Shred", 1000 );
+ Folder folder = new Folder( "Enron" );
+ s.persist( doc );
+ s.persist( folder );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ List result = s.createCriteria( File.class ).list();
+ assertNotNull( result );
+ assertEquals( 2, result.size() );
+ File f2 = (File) result.get( 0 );
+ checkClassType( f2, doc, folder );
+ f2 = (File) result.get( 1 );
+ checkClassType( f2, doc, folder );
+ tx.commit();
+ s.close();
+ }
+
+ private void checkClassType(File fruitToTest, File f, Folder a) {
+ if ( fruitToTest.getName().equals( f.getName() ) ) {
+ assertFalse( fruitToTest instanceof Folder );
+ }
+ else if ( fruitToTest.getName().equals( a.getName() ) ) {
+ assertTrue( fruitToTest instanceof Folder );
+ }
+ else {
+ fail( "Result does not contains the previously inserted elements" );
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ File.class,
+ Folder.class,
+ Document.class,
+ SymbolicLink.class
+ };
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: SymbolicLink.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.inheritance.union;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "SymbolicLinkUnion")
+public class SymbolicLink extends File {
+
+ File target;
+
+ SymbolicLink() {
+ }
+
+ public SymbolicLink(File target) {
+ this.target = target;
+ }
+
+ @ManyToOne(optional = false)
+ public File getTarget() {
+ return target;
+ }
+
+ public void setTarget(File target) {
+ this.target = target;
+ }
+
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/Contact.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/Contact.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/Contact.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: Contact.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.interfaces;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Contact {
+ Integer getId();
+
+ String getName();
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/ContactImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/ContactImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/ContactImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: ContactImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.interfaces;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class ContactImpl implements Contact {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/InterfacesTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/InterfacesTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/InterfacesTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: InterfacesTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.interfaces;
+
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InterfacesTest extends TestCase {
+ public void testInterface() {
+
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ ContactImpl.class,
+ UserImpl.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/User.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/User.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/User.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,15 @@
+//$Id: User.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.interfaces;
+
+import java.util.Collection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface User {
+ Integer getId();
+
+ Collection<Contact> getContacts();
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/UserImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/UserImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/interfaces/UserImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,36 @@
+//$Id: UserImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.interfaces;
+
+import java.util.Collection;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class UserImpl implements User {
+ private Collection<Contact> contacts;
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @OneToMany(targetEntity = ContactImpl.class)
+ public Collection<Contact> getContacts() {
+ return contacts;
+ }
+
+ public void setContacts(Collection<Contact> contacts) {
+ this.contacts = contacts;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/A.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/A.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/A.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: A.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import java.util.Date;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public abstract class A {
+ @Column(nullable = false)
+ private Date createDate;
+
+
+ public Date getCreateDate() {
+ return createDate;
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/B.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/B.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/B.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: B.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
+public abstract class B extends A {
+ @Id
+ @GeneratedValue
+ private Integer id;
+ @Column(nullable = false) private String name;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/C.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/C.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/C.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: C.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("C")
+@SecondaryTable(name="C")
+public class C extends B {
+ @Column(table = "C") private int age;
+
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Cat.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Cat.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Cat.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,101 @@
+//$Id: Cat.java 16418 2009-04-23 09:55:33Z jcosta(a)redhat.com $
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.SecondaryTable;
+import javax.persistence.SecondaryTables;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.Table;
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.annotations.Tables;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.SQLInsert;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SecondaryTables({
+@SecondaryTable(name = "`Cat nbr1`"),
+@SecondaryTable(name = "Cat2", uniqueConstraints =
{@UniqueConstraint(columnNames = {"storyPart2"})})
+ })
+@Tables( {
+ @Table(appliesTo = "Cat", indexes = @Index(name = "secondname",
+ columnNames = "secondName"), comment = "My cat table" ),
+ @Table(appliesTo = "Cat2", foreignKey =
@ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
+ sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?),
?)") )
+ } )
+public class Cat implements Serializable {
+
+ private Integer id;
+ private String name;
+ private String secondName;
+ private String storyPart1;
+ private String storyPart2;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ @Index(name = "nameindex")
+ public String getName() {
+ return name;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ public String getSecondName() {
+ return secondName;
+ }
+
+ public void setSecondName(String secondName) {
+ this.secondName = secondName;
+ }
+
+// Bug HHH-36
+// @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+// @JoinColumn(name="CAT_ID", secondaryTable="ExtendedLife")
+// public Set<Life> getLifes() {
+// return lifes;
+// }
+//
+// public void setLifes(Set<Life> collection) {
+// lifes = collection;
+// }
+
+ @Column(table = "`Cat nbr1`")
+ @Index(name = "story1index")
+ public String getStoryPart1() {
+ return storyPart1;
+ }
+
+ @Column(table = "Cat2", nullable = false)
+ public String getStoryPart2() {
+ return storyPart2;
+ }
+
+
+ public void setStoryPart1(String string) {
+ storyPart1 = string;
+ }
+
+
+ public void setStoryPart2(String string) {
+ storyPart2 = string;
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Death.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Death.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Death.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,30 @@
+//$Id: Death.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SecondaryTable;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SecondaryTable(
+ name = "ExtendedDeath",
+ pkJoinColumns = @PrimaryKeyJoinColumn(name = "DEATH_ID")
+)
+public class Death implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ public Integer id;
+ @Column(name = "death_date")
+ public Date date;
+ @Column(table = "ExtendedDeath")
+ public String howDoesItHappen;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Dog.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Dog.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Dog.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: Dog.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SecondaryTable(
+ name = "DogThoroughbred",
+ pkJoinColumns = {@PrimaryKeyJoinColumn(name = "NAME", referencedColumnName =
"name"),
+ @PrimaryKeyJoinColumn(name = "OWNER_NAME", referencedColumnName =
"ownerName")}
+)
+public class Dog {
+ @Id
+ public DogPk id;
+ public int weight;
+ @Column(table = "DogThoroughbred")
+ public String thoroughbredName;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Dog ) ) return false;
+
+ final Dog dog = (Dog) o;
+
+ if ( !id.equals( dog.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/DogPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/DogPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/DogPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: DogPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class DogPk implements Serializable {
+ public String name;
+ public String ownerName;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof DogPk ) ) return false;
+
+ final DogPk dogPk = (DogPk) o;
+
+ if ( !name.equals( dogPk.name ) ) return false;
+ if ( !ownerName.equals( dogPk.ownerName ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = name.hashCode();
+ result = 29 * result + ownerName.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/JoinTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/JoinTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/JoinTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,206 @@
+//$Id: JoinTest.java 16418 2009-04-23 09:55:33Z jcosta(a)redhat.com $
+package org.hibernate.test.annotations.join;
+
+import java.util.Date;
+
+import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Expression;
+import org.hibernate.mapping.Join;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinTest extends TestCase {
+
+ public void testDefaultValue() throws Exception {
+ Join join = (Join) getCfg().getClassMapping( Life.class.getName()
).getJoinClosureIterator().next();
+ assertEquals( "ExtendedLife", join.getTable().getName() );
+ org.hibernate.mapping.Column owner = new org.hibernate.mapping.Column();
+ owner.setName( "LIFE_ID" );
+ assertTrue( join.getTable().getPrimaryKey().containsColumn( owner ) );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Life life = new Life();
+ life.duration = 15;
+ life.fullDescription = "Long long description";
+ s.persist( life );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from " + Life.class.getName() );
+ life = (Life) q.uniqueResult();
+ assertEquals( "Long long description", life.fullDescription );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositePK() throws Exception {
+ Join join = (Join) getCfg().getClassMapping( Dog.class.getName()
).getJoinClosureIterator().next();
+ assertEquals( "DogThoroughbred", join.getTable().getName() );
+ org.hibernate.mapping.Column owner = new org.hibernate.mapping.Column();
+ owner.setName( "OWNER_NAME" );
+ assertTrue( join.getTable().getPrimaryKey().containsColumn( owner ) );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Dog dog = new Dog();
+ DogPk id = new DogPk();
+ id.name = "Thalie";
+ id.ownerName = "Martine";
+ dog.id = id;
+ dog.weight = 30;
+ dog.thoroughbredName = "Colley";
+ s.persist( dog );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from Dog" );
+ dog = (Dog) q.uniqueResult();
+ assertEquals( "Colley", dog.thoroughbredName );
+ tx.commit();
+ s.close();
+ }
+
+ public void testExplicitValue() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Death death = new Death();
+ death.date = new Date();
+ death.howDoesItHappen = "Well, haven't seen it";
+ s.persist( death );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from " + Death.class.getName() );
+ death = (Death) q.uniqueResult();
+ assertEquals( "Well, haven't seen it", death.howDoesItHappen );
+ s.delete( death );
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOne() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Life life = new Life();
+ Cat cat = new Cat();
+ cat.setName( "kitty" );
+ cat.setStoryPart2( "and the story continues" );
+ life.duration = 15;
+ life.fullDescription = "Long long description";
+ life.owner = cat;
+ s.persist( life );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Criteria crit = s.createCriteria( Life.class );
+ crit.createCriteria( "owner" ).add( Expression.eq( "name",
"kitty" ) );
+ life = (Life) crit.uniqueResult();
+ assertEquals( "Long long description", life.fullDescription );
+ s.delete( life.owner );
+ s.delete( life );
+ tx.commit();
+ s.close();
+ }
+
+ public void testUniqueConstaintOnSecondaryTable() throws Exception {
+ Cat cat = new Cat();
+ cat.setStoryPart2( "My long story" );
+ Cat cat2 = new Cat();
+ cat2.setStoryPart2( "My long story" );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ try {
+ s.persist( cat );
+ s.persist( cat2 );
+ tx.commit();
+ fail( "unique constraints violation on secondary table" );
+ }
+ catch (HibernateException e) {
+ //success
+ }
+ finally {
+ if ( tx != null ) tx.rollback();
+ s.close();
+ }
+ }
+
+ public void testFetchModeOnSecondaryTable() throws Exception {
+ Cat cat = new Cat();
+ cat.setStoryPart2( "My long story" );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ s.persist( cat );
+ s.flush();
+ s.clear();
+
+ s.get( Cat.class, cat.getId() );
+ //Find a way to test it, I need to define the secondary table on a subclass
+
+ tx.rollback();
+ s.close();
+ }
+
+ public void testCustomSQL() throws Exception {
+ Cat cat = new Cat();
+ String storyPart2 = "My long story";
+ cat.setStoryPart2( storyPart2 );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ s.persist( cat );
+ s.flush();
+ s.clear();
+
+ Cat c = (Cat) s.get( Cat.class, cat.getId() );
+ assertEquals( storyPart2.toUpperCase(), c.getStoryPart2() );
+
+ tx.rollback();
+ s.close();
+ }
+
+ public void testMappedSuperclassAndSecondaryTable() throws Exception {
+ Session s = openSession( );
+ s.getTransaction().begin();
+ C c = new C();
+ c.setAge( 12 );
+ c.setCreateDate( new Date() );
+ c.setName( "Bob" );
+ s.persist( c );
+ s.flush();
+ s.clear();
+ c= (C) s.get( C.class, c.getId() );
+ assertNotNull( c.getCreateDate() );
+ assertNotNull( c.getName() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Life.class,
+ Death.class,
+ Cat.class,
+ Dog.class,
+ A.class,
+ B.class,
+ C.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Life.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Life.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/join/Life.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: Life.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SecondaryTable(name = "ExtendedLife")
+public class Life implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "LIFE_ID")
+ public Integer id;
+
+ public int duration;
+ @Column(table = "ExtendedLife")
+ public String fullDescription;
+
+ @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinColumn(name = "CAT_ID", table = "ExtendedLife")
+ public Cat owner;
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Loader.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Loader.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Loader.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+
+ Used to demonstrate the declarative configuration
+ of both hbm files and annotated classes
+ See hibernate.cfg.xml and ConfigurationTest
+
+-->
+
+<hibernate-mapping package="org.hibernate.test.annotations.loader">
+
+ <sql-query name="loadByTeam">
+ <load-collection alias="p" role="Team.players"/>
+ select {p.*} from Player p where p.team_id = ?
+ </sql-query>
+
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/LoaderTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/LoaderTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/LoaderTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,69 @@
+//$Id: LoaderTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.loader;
+
+import java.util.Set;
+import java.util.Iterator;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LoaderTest extends TestCase {
+
+
+ protected String[] getXmlFiles() {
+ return new String[] {
+ "org/hibernate/test/annotations/loader/Loader.hbm.xml"
+ };
+ }
+
+ public void testBasic() throws Exception {
+ Session s = openSession( );
+ Transaction tx = s.beginTransaction();
+ Team t = new Team();
+ Player p = new Player();
+ p.setName("me");
+ t.getPlayers().add(p);
+ p.setTeam(t);
+
+
+ try {
+ s.persist(p);
+ s.persist(t);
+ tx.commit();
+ s.close();
+
+ s= openSession( );
+ tx = s.beginTransaction();
+ Team t2 = (Team)s.load(Team.class,new Long(1));
+ Set<Player> players = t2.getPlayers();
+ Iterator<Player> iterator = players.iterator();
+ assertEquals("me", iterator.next().getName());
+ tx.commit();
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ if ( tx != null ) tx.rollback();
+ }
+ finally {
+ s.close();
+ }
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Player.class,
+ Team.class
+ };
+ }
+
+}
+
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/LoaderTest.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Player.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Player.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Player.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+package org.hibernate.test.annotations.loader;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+
+@Entity
+public class Player {
+
+ private Long id;
+ private Team team;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ @ManyToOne(targetEntity = Team.class)
+ @Fetch(FetchMode.SELECT)
+ @JoinColumn(name = "team_id")
+ public Team getTeam() {
+ return team;
+ }
+
+ public void setTeam(Team team) {
+ this.team = team;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Player.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Team.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Team.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Team.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+package org.hibernate.test.annotations.loader;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.Loader;
+import org.hibernate.annotations.NamedNativeQueries;
+import org.hibernate.annotations.NamedNativeQuery;
+
+import javax.persistence.NamedQuery;
+
+@Entity
+public class Team {
+ private Long id;
+ private Set<Player> players = new HashSet<Player>();
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ @OneToMany(targetEntity = Player.class, mappedBy = "team", fetch =
FetchType.EAGER)
+ @Fetch(FetchMode.SELECT)
+ @Loader(namedQuery = "loadByTeam")
+ public Set<Player> getPlayers() {
+ return players;
+ }
+
+ public void setPlayers(Set<Player> players) {
+ this.players = players;
+ }
+}
Property changes on:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/loader/Team.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Book.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Book.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Book.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,79 @@
+//$Id: Book.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.lob;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "lob_book")
+public class Book {
+ private Integer id;
+ private String shortDescription;
+ private String fullText;
+ private Character[] code;
+ private char[] code2;
+ private Editor editor;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getShortDescription() {
+ return shortDescription;
+ }
+
+ public void setShortDescription(String shortDescription) {
+ this.shortDescription = shortDescription;
+ }
+
+ @Lob
+ @Column(name = "fld_fulltext")
+ public String getFullText() {
+ return fullText;
+ }
+
+ public void setFullText(String fullText) {
+ this.fullText = fullText;
+ }
+
+ @Lob
+ @Column(name = "fld_code")
+ public Character[] getCode() {
+ return code;
+ }
+
+ public void setCode(Character[] code) {
+ this.code = code;
+ }
+
+ @Lob
+ public char[] getCode2() {
+ return code2;
+ }
+
+ public void setCode2(char[] code2) {
+ this.code2 = code2;
+ }
+
+ @Lob
+ public Editor getEditor() {
+ return editor;
+ }
+
+ public void setEditor(Editor editor) {
+ this.editor = editor;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/CompiledCode.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/CompiledCode.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/CompiledCode.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+//$Id: CompiledCode.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.lob;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+/**
+ * Compiled code representation
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CompiledCode {
+ private Integer id;
+ private Byte[] header;
+ private byte[] fullCode;
+ private byte[] metadata;
+
+ public byte[] getMetadata() {
+ return metadata;
+ }
+
+ public void setMetadata(byte[] metadata) {
+ this.metadata = metadata;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Lob
+ public Byte[] getHeader() {
+ return header;
+ }
+
+ public void setHeader(Byte[] header) {
+ this.header = header;
+ }
+
+ @Lob
+ public byte[] getFullCode() {
+ return fullCode;
+ }
+
+ public void setFullCode(byte[] fullCode) {
+ this.fullCode = fullCode;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Editor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Editor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/Editor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+//$Id: Editor.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.lob;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Editor implements Serializable {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/LobTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/LobTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/lob/LobTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,131 @@
+//$Id: LobTest.java 17724 2009-10-13 15:47:59Z stliu $
+package org.hibernate.test.annotations.lob;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LobTest extends TestCase {
+ public void testSerializableToBlob() throws Exception {
+ Book book = new Book();
+ Editor editor = new Editor();
+ editor.setName( "O'Reilly" );
+ book.setEditor( editor );
+ book.setCode2( new char[]{'r'} );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( book );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Book loadedBook = (Book) s.get( Book.class, book.getId() );
+ assertNotNull( loadedBook.getEditor() );
+ assertEquals( book.getEditor().getName(), loadedBook.getEditor().getName() );
+ loadedBook.setEditor( null );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ loadedBook = (Book) s.get( Book.class, book.getId() );
+ assertNull( loadedBook.getEditor() );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testClob() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Book b = new Book();
+ b.setShortDescription( "Hibernate Bible" );
+ b.setFullText( "Hibernate in Action aims to..." );
+ b.setCode( new Character[]{'a', 'b', 'c'} );
+ b.setCode2( new char[]{'a', 'b', 'c'} );
+ s.persist( b );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Book b2 = (Book) s.get( Book.class, b.getId() );
+ assertNotNull( b2 );
+ assertEquals( b2.getFullText(), b.getFullText() );
+ assertEquals( b2.getCode()[1].charValue(), b.getCode()[1].charValue() );
+ assertEquals( b2.getCode2()[2], b.getCode2()[2] );
+ tx.commit();
+ s.close();
+ }
+
+ public void testBlob() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ CompiledCode cc = new CompiledCode();
+ Byte[] header = new Byte[2];
+ header[0] = new Byte( (byte) 3 );
+ header[1] = new Byte( (byte) 0 );
+ cc.setHeader( header );
+ int codeSize = 5;
+ byte[] full = new byte[codeSize];
+ for ( int i = 0; i < codeSize ; i++ ) {
+ full[i] = (byte) ( 1 + i );
+ }
+ cc.setFullCode( full );
+ s.persist( cc );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ CompiledCode recompiled = (CompiledCode) s.get( CompiledCode.class, cc.getId() );
+ assertEquals( recompiled.getHeader()[1], cc.getHeader()[1] );
+ assertEquals( recompiled.getFullCode()[codeSize - 1], cc.getFullCode()[codeSize - 1]
);
+ tx.commit();
+ s.close();
+ }
+
+ public void testBinary() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ CompiledCode cc = new CompiledCode();
+ byte[] metadata = new byte[2];
+ metadata[0] = (byte) 3;
+ metadata[1] = (byte) 0;
+ cc.setMetadata( metadata );
+ s.persist( cc );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ CompiledCode recompiled = (CompiledCode) s.get( CompiledCode.class, cc.getId() );
+ assertEquals( recompiled.getMetadata()[1], cc.getMetadata()[1] );
+ tx.commit();
+ s.close();
+ }
+
+ @Override
+ protected boolean runForCurrentDialect() {
+ return super.runForCurrentDialect() &&
getDialect().supportsExpectedLobUsagePattern();
+ }
+
+ public LobTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Book.class,
+ CompiledCode.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Building.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Building.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Building.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Building.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Building {
+ @Id @GeneratedValue private Long id;
+
+ @ManyToOne @JoinColumn(name="company_id", referencedColumnName =
"name")
+ private BuildingCompany company;
+
+ public BuildingCompany getCompany() {
+ return company;
+ }
+
+ public void setCompany(BuildingCompany company) {
+ this.company = company;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/BuildingCompany.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/BuildingCompany.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/BuildingCompany.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: BuildingCompany.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class BuildingCompany extends Company {
+ @Id @GeneratedValue private Long id;
+ private Date foundedIn;
+
+ public Date getFoundedIn() {
+ return foundedIn;
+ }
+
+ public void setFoundedIn(Date foundedIn) {
+ this.foundedIn = foundedIn;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Cat.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Cat.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Cat.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,68 @@
+//$Id: Cat.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.ManyToMany;
+import javax.persistence.Table;
+import javax.persistence.JoinTable;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_cat")
+//ANN-630
+//(a)org.hibernate.annotations.Table(appliesTo= "TT", indexes = @Index(name =
"testidx", columnNames = "cat_id"))
+public class Cat {
+ private CatPk id;
+ private int age;
+ private Set<Woman> humanContacts;
+
+ @ManyToMany
+ //@Index(name = "CAT_HUMAN_IDX")
+ @JoinTable(name="TT")
+ public Set<Woman> getHumanContacts() {
+ return humanContacts;
+ }
+
+ public void setHumanContacts(Set<Woman> humanContacts) {
+ this.humanContacts = humanContacts;
+ }
+
+ @EmbeddedId()
+ public CatPk getId() {
+ return id;
+ }
+
+ public void setId(CatPk id) {
+ this.id = id;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Cat ) ) return false;
+
+ final Cat cat = (Cat) o;
+
+ if ( !id.equals( cat.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/CatPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/CatPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/CatPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: CatPk.java 16343 2009-04-15 18:33:43Z gbadner $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CatPk implements Serializable {
+ private String name;
+ private String thoroughbred;
+
+ @Column(length=128)
+ public String getThoroughbred() {
+ return thoroughbred;
+ }
+
+ public void setThoroughbred(String thoroughbred) {
+ this.thoroughbred = thoroughbred;
+ }
+
+ @Column(length=128)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof CatPk ) ) return false;
+
+ final CatPk catPk = (CatPk) o;
+
+ if ( !name.equals( catPk.name ) ) return false;
+ if ( !thoroughbred.equals( catPk.thoroughbred ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = name.hashCode();
+ result = 29 * result + thoroughbred.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/City.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/City.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/City.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: City.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_city")
+public class City {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Company.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Company.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Company.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Company.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Company implements Serializable {
+ @Column private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Contractor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Contractor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Contractor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: Employee.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+
+/**
+ * Employee in an Employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SuppressWarnings("serial")
+public class Contractor extends Employee implements Serializable {
+
+ private float hourlyRate;
+
+ public float getHourlyRate() {
+ return hourlyRate;
+ }
+
+ public void setHourlyRate(float hourlyRate) {
+ this.hourlyRate = hourlyRate;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employee.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employee.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employee.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: Employee.java 14781 2008-06-18 18:04:17Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.ManyToMany;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Cascade;
+
+/**
+ * Employee in an Employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@SuppressWarnings("serial")
+public class Employee implements Serializable {
+ private Integer id;
+ private Collection<Employer> employers;
+ private String name;
+
+ @Column(name="fld_name")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+ @ManyToMany(
+ cascade = {CascadeType.PERSIST, CascadeType.MERGE},
+ mappedBy = "employees"
+ )
+ @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
+ org.hibernate.annotations.CascadeType.PERSIST})
+ public Collection<Employer> getEmployers() {
+ return employers;
+ }
+
+ public void setEmployers(Collection<Employer> employers) {
+ this.employers = employers;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Employer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,80 @@
+//$Id: Employer.java 14764 2008-06-12 13:41:16Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cascade;
+
+/**
+ * Employer in a employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+@Table(name="`Employer`")
+@SuppressWarnings({"serial", "unchecked"})
+public class Employer implements Serializable {
+ private Integer id;
+ private Collection employees;
+ private List contractors;
+
+ @ManyToMany(
+ targetEntity = org.hibernate.test.annotations.manytomany.Contractor.class,
+ cascade = {CascadeType.PERSIST, CascadeType.MERGE}
+ )
+ @JoinTable(
+ name = "EMPLOYER_CONTRACTOR",
+ joinColumns = {@JoinColumn(name = "EMPLOYER_ID")},
+ inverseJoinColumns = {@JoinColumn(name = "CONTRACTOR_ID")}
+ )
+ @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
+ @OrderBy("name desc")
+ public List getContractors() {
+ return contractors;
+ }
+
+ public void setContractors(List contractors) {
+ this.contractors = contractors;
+ }
+
+ @ManyToMany(
+ targetEntity = org.hibernate.test.annotations.manytomany.Employee.class,
+ cascade = {CascadeType.PERSIST, CascadeType.MERGE}
+ )
+ @JoinTable(
+ name = "EMPLOYER_EMPLOYEE",
+ joinColumns = {@JoinColumn(name = "EMPER_ID")},
+ inverseJoinColumns = {@JoinColumn(name = "EMPEE_ID")}
+ )
+ @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
+ @OrderBy("name asc")
+ public Collection getEmployees() {
+ return employees;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setEmployees(Collection set) {
+ employees = set;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Friend.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Friend.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Friend.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,59 @@
+//$Id: Friend.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+
+/**
+ * Friend has other friends in a many to many way
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Friend implements Serializable {
+ private Integer id;
+ private String name;
+ private Set<Friend> friends;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(Integer integer) {
+ id = integer;
+ }
+
+ public void setName(String string) {
+ name = string;
+ }
+
+ @ManyToMany(
+ cascade = {CascadeType.PERSIST, CascadeType.MERGE}
+ )
+ @JoinTable(
+ name = "FRIEND2FRIEND",
+ joinColumns = {@JoinColumn(name = "FROM_FR", nullable = false)},
+ inverseJoinColumns = {@JoinColumn(name = "TO_FR", nullable = false)}
+ )
+ public Set<Friend> getFriends() {
+ return friends;
+ }
+
+ public void setFriends(Set<Friend> friend) {
+ this.friends = friend;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Group.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Group.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Group.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: Group.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterJoinTable;
+import org.hibernate.annotations.WhereJoinTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_group")
+@FilterDef(name="Groupfilter")
+public class Group {
+ private Integer id;
+ private Collection<Permission> permissions;
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToMany(cascade = CascadeType.PERSIST)
+ @OrderBy("expirationDate")
+ @Where(clause = "1=1")
+ @WhereJoinTable(clause = "2=2")
+ @Filter(name="Groupfilter", condition = "3=3")
+ @FilterJoinTable(name="Groupfilter", condition = "4=4")
+ public Collection<Permission> getPermissions() {
+ return permissions;
+ }
+
+ public void setPermissions(Collection<Permission> permissions) {
+ this.permissions = permissions;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/GroupWithSet.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/GroupWithSet.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/GroupWithSet.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,55 @@
+//$Id: GroupWithSet.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Collection;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterJoinTable;
+import org.hibernate.annotations.WhereJoinTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_group")
+@FilterDef(name="Groupfilter")
+public class GroupWithSet {
+ private Integer id;
+ private Set<Permission> permissions;
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToMany(cascade = CascadeType.PERSIST)
+ @OrderBy("expirationDate")
+ @Where(clause = "1=1")
+ @WhereJoinTable(clause = "2=2")
+ @Filter(name="Groupfilter", condition = "3=3")
+ @FilterJoinTable(name="Groupfilter", condition = "4=4")
+ public Set<Permission> getPermissions() {
+ return permissions;
+ }
+
+ public void setPermissions(Set<Permission> permissions) {
+ this.permissions = permissions;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Inspector.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Inspector.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Inspector.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: Inspector.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+class Inspector implements Serializable {
+ @Id
+ @GeneratedValue
+ @Column(name = "id")
+ private Long _id;
+
+ private String name;
+
+ public Long getId() {
+ return _id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id: InspectorPrefixes.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@PrimaryKeyJoinColumn(name = "inspector_id")
+class InspectorPrefixes extends Inspector {
+ @Column(name = "prefixes", nullable = false)
+ private String prefixes;
+ @ManyToMany()
+ @JoinTable(name = "deserted_area",
+ joinColumns = @JoinColumn(name = "inspector_name", referencedColumnName =
"name"),
+ inverseJoinColumns = @JoinColumn(name = "area_id", referencedColumnName =
"id"))
+ private List<Zone> desertedAreas = new ArrayList<Zone>();
+
+ @ManyToMany()
+ @JoinTable(name = "inspector_prefixes_areas",
+ joinColumns = @JoinColumn(name = "inspector_id", referencedColumnName =
"inspector_id"),
+ inverseJoinColumns = @JoinColumn(name = "area_id", referencedColumnName =
"id"))
+ private List<Zone> areas = new ArrayList<Zone>();
+
+ InspectorPrefixes() {
+ }
+
+ InspectorPrefixes(String prefixes) {
+ this.prefixes = prefixes;
+ }
+
+ public String getPrefixes() {
+ return this.prefixes;
+ }
+
+ public List<Zone> getAreas() {
+ return areas;
+ }
+
+ public List<Zone> getDesertedAreas() {
+ return desertedAreas;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/KnownClient.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/KnownClient.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/KnownClient.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+//$Id: KnownClient.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class KnownClient {
+ private Integer id;
+ private String name;
+ private Set<Store> stores;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToMany(mappedBy = "customers")
+ public Set<Store> getStores() {
+ return stores;
+ }
+
+ public void setStores(Set<Store> stores) {
+ this.stores = stores;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Man.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Man.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Man.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,63 @@
+//$Id: Man.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * Man knowing sevezral womens
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Man implements Serializable {
+ private ManPk id;
+ private String carName;
+ private Set<Woman> womens;
+
+ @ManyToMany(cascade = {CascadeType.ALL}, mappedBy = "mens")
+ public Set<Woman> getWomens() {
+ return womens;
+ }
+
+ public void setWomens(Set<Woman> womens) {
+ this.womens = womens;
+ }
+
+ @Id
+ public ManPk getId() {
+ return id;
+ }
+
+ public void setId(ManPk id) {
+ this.id = id;
+ }
+
+ public String getCarName() {
+ return carName;
+ }
+
+ public void setCarName(String carName) {
+ this.carName = carName;
+ }
+
+ public int hashCode() {
+ //a NPE can occurs, but I don't expect hashcode to be used before pk is set
+ return getId().hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //a NPE can occurs, but I don't expect equals to be used before pk is set
+ if ( obj != null && obj instanceof Man ) {
+ return getId().equals( ( (Man) obj ).getId() );
+ }
+ else {
+ return false;
+ }
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,60 @@
+//$Id: ManPk.java 16343 2009-04-15 18:33:43Z gbadner $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class ManPk implements Serializable {
+ private String firstName;
+ private String lastName;
+ private boolean isElder;
+
+ public boolean isElder() {
+ return isElder;
+ }
+
+ public void setElder(boolean elder) {
+ isElder = elder;
+ }
+
+ public int hashCode() {
+ //this implem sucks
+ return getFirstName().hashCode() + getLastName().hashCode() + ( isElder() ? 0 : 1 );
+ }
+
+ public boolean equals(Object obj) {
+ //firstName and lastName are expected to be set in this implem
+ if ( obj != null && obj instanceof ManPk ) {
+ ManPk other = (ManPk) obj;
+ return getFirstName().equals( other.getFirstName() )
+ && getLastName().equals( other.getLastName() )
+ && isElder() == other.isElder();
+ }
+ else {
+ return false;
+ }
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ @Column(length=128)
+ public String getFirstName() {
+ return firstName;
+ }
+
+ @Column(length=128)
+ public String getLastName() {
+ return lastName;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManyToManyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManyToManyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/ManyToManyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,671 @@
+//$Id: ManyToManyTest.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytomany;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.hibernate.Hibernate;
+import org.hibernate.JDBCException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Many to many tests
+ *
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("unchecked")
+public class ManyToManyTest extends TestCase {
+
+ public ManyToManyTest(String x) {
+ super( x );
+ }
+
+ public void testDefault() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Store fnac = new Store();
+ fnac.setName( "Fnac" );
+ KnownClient emmanuel = new KnownClient();
+ emmanuel.setName( "Emmanuel" );
+ emmanuel.setStores( new HashSet<Store>() );
+ fnac.setCustomers( new HashSet<KnownClient>() );
+ fnac.getCustomers().add( emmanuel );
+ emmanuel.getStores().add( fnac );
+ fnac.setImplantedIn( new HashSet<City>() );
+ City paris = new City();
+ fnac.getImplantedIn().add( paris );
+ paris.setName( "Paris" );
+ s.persist( fnac );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Store store;
+ KnownClient knownClient;
+ City city;
+ store = (Store) s.get( Store.class, fnac.getId() );
+ assertNotNull( store );
+ assertNotNull( store.getCustomers() );
+ assertEquals( 1, store.getCustomers().size() );
+ knownClient = (KnownClient) store.getCustomers().iterator().next();
+ assertEquals( emmanuel.getName(), knownClient.getName() );
+ assertNotNull( store.getImplantedIn() );
+ assertEquals( 1, store.getImplantedIn().size() );
+ city = (City) store.getImplantedIn().iterator().next();
+ assertEquals( paris.getName(), city.getName() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ knownClient = (KnownClient) s.get( KnownClient.class, emmanuel.getId() );
+ assertNotNull( knownClient );
+ assertNotNull( knownClient.getStores() );
+ assertEquals( 1, knownClient.getStores().size() );
+ store = (Store) knownClient.getStores().iterator().next();
+ assertEquals( fnac.getName(), store.getName() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testDefaultCompositePk() throws Exception {
+ Session s;
+ Transaction tx;
+
+ s = openSession();
+ tx = s.beginTransaction();
+ CatPk catPk = new CatPk();
+ catPk.setName( "Minou" );
+ catPk.setThoroughbred( "Persan" );
+ Cat cat = new Cat();
+ cat.setId( catPk );
+ cat.setAge( 32 );
+ Woman woman = new Woman();
+ WomanPk womanPk = new WomanPk();
+ womanPk.setFirstName( "Emma" );
+ womanPk.setLastName( "Peel" );
+ woman.setId( womanPk );
+ woman.setCats( new HashSet<Cat>() );
+ woman.getCats().add( cat );
+ cat.setHumanContacts( new HashSet<Woman>() );
+ cat.getHumanContacts().add( woman );
+ s.persist( woman );
+ s.persist( cat );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Cat sameCat = (Cat) s.get( Cat.class, cat.getId() );
+ assertNotNull( sameCat );
+ assertNotNull( sameCat.getHumanContacts() );
+ assertEquals( 1, sameCat.getHumanContacts().size() );
+ Woman sameWoman = sameCat.getHumanContacts().iterator().next();
+ assertEquals( sameWoman.getId().getLastName(), woman.getId().getLastName() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ sameWoman = (Woman) s.get( Woman.class, woman.getId() );
+ assertNotNull( sameWoman );
+ assertNotNull( sameWoman.getCats() );
+ assertEquals( 1, sameWoman.getCats().size() );
+ sameCat = sameWoman.getCats().iterator().next();
+ assertEquals( cat.getAge(), sameCat.getAge() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testMappedBy() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Store fnac = new Store();
+ fnac.setName( "Fnac" );
+ Supplier emi = new Supplier();
+ emi.setName( "Emmanuel" );
+ emi.setSuppStores( new HashSet<Store>() );
+ fnac.setSuppliers( new HashSet<Supplier>() );
+ fnac.getSuppliers().add( emi );
+ emi.getSuppStores().add( fnac );
+ s.persist( fnac );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Store store;
+ Supplier supplier;
+ store = (Store) s.get( Store.class, fnac.getId() );
+ assertNotNull( store );
+ assertNotNull( store.getSuppliers() );
+ assertEquals( 1, store.getSuppliers().size() );
+ supplier = (Supplier) store.getSuppliers().iterator().next();
+ assertEquals( emi.getName(), supplier.getName() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ supplier = (Supplier) s.get( Supplier.class, emi.getId() );
+ assertNotNull( supplier );
+ assertNotNull( supplier.getSuppStores() );
+ assertEquals( 1, supplier.getSuppStores().size() );
+ store = (Store) supplier.getSuppStores().iterator().next();
+ assertEquals( fnac.getName(), store.getName() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testBasic() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Employer er = new Employer();
+ Employee ee = new Employee();
+ s.persist( ee );
+ Set erColl = new HashSet();
+ Collection eeColl = new ArrayList();
+ erColl.add( ee );
+ eeColl.add( er );
+ er.setEmployees( erColl );
+ ee.setEmployers( eeColl );
+ //s.persist(ee);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ er = (Employer) s.load( Employer.class, er.getId() );
+ assertNotNull( er );
+ assertNotNull( er.getEmployees() );
+ assertEquals( 1, er.getEmployees().size() );
+ Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
+ assertEquals( ee.getId(), eeFromDb.getId() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ ee = (Employee) s.get( Employee.class, ee.getId() );
+ assertNotNull( ee );
+ assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized(
ee.getEmployers() ) );
+ tx.commit();
+ assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized(
ee.getEmployers() ) );
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ ee = (Employee) s.get( Employee.class, ee.getId() );
+ assertNotNull( ee );
+ er = ee.getEmployers().iterator().next();
+ assertTrue( "second join non lazy", Hibernate.isInitialized( er ) );
+ s.delete( er );
+ s.delete( ee );
+ tx.commit();
+ s.close();
+ }
+
+ public void testOrderByEmployee() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Employer employer = new Employer();
+ Employee employee1 = new Employee();
+ employee1.setName( "Emmanuel" );
+ Employee employee2 = new Employee();
+ employee2.setName( "Alice" );
+ s.persist( employee1 );
+ s.persist( employee2 );
+ Set erColl = new HashSet();
+ Collection eeColl = new ArrayList();
+ Collection eeColl2 = new ArrayList();
+ erColl.add( employee1 );
+ erColl.add( employee2 );
+ eeColl.add( employer );
+ eeColl2.add( employer );
+ employer.setEmployees( erColl );
+ employee1.setEmployers( eeColl );
+ employee2.setEmployers( eeColl2 );
+
+ s.flush();
+ s.clear();
+
+ employer = (Employer) s.get( Employer.class, employer.getId() );
+ assertNotNull( employer );
+ assertNotNull( employer.getEmployees() );
+ assertEquals( 2, employer.getEmployees().size() );
+ Employee eeFromDb = (Employee) employer.getEmployees().iterator().next();
+ assertEquals( employee2.getName(), eeFromDb.getName() );
+ tx.rollback();
+ s.close();
+
+ }
+
+ /**
+ * ANN-625
+ *
+ * @throws Exception in case the test fails.
+ *
+ * This test only works against databases which allow a mixed usage of
+ * table names and table aliases. The generated SQL for this test is:
+ *
+ * select
+ * contractor0_.EMPLOYER_ID as EMPLOYER1_1_,
+ * contractor0_.CONTRACTOR_ID as CONTRACTOR2_1_,
+ * contractor1_.id as id2_0_,
+ * contractor1_.fld_name as fld3_2_0_,
+ * contractor1_.hourlyRate as hourlyRate2_0_
+ * from
+ * EMPLOYER_CONTRACTOR contractor0_
+ * left outer join
+ * Employee contractor1_
+ * on contractor0_.CONTRACTOR_ID=contractor1_.id
+ * where
+ * contractor0_.EMPLOYER_ID=?
+ * order by
+ * Employee.fld_name desc
+ *
+ *
+ */
+// HHH-3577
+// public void testOrderByContractor() throws Exception {
+//
+// Session s;
+// Transaction tx;
+// s = openSession();
+// tx = s.beginTransaction();
+//
+// // create some test entities
+// Employer employer = new Employer();
+// Contractor contractor1 = new Contractor();
+// contractor1.setName( "Emmanuel" );
+// contractor1.setHourlyRate(100.0f);
+// Contractor contractor2 = new Contractor();
+// contractor2.setName( "Hardy" );
+// contractor2.setHourlyRate(99.99f);
+// s.persist( contractor1 );
+// s.persist( contractor2 );
+//
+// // add contractors to employer
+// List setOfContractors = new ArrayList();
+// setOfContractors.add( contractor1 );
+// setOfContractors.add( contractor2 );
+// employer.setContractors( setOfContractors );
+//
+// // add employer to contractors
+// Collection employerListContractor1 = new ArrayList();
+// employerListContractor1.add( employer );
+// contractor1.setEmployers( employerListContractor1 );
+//
+// Collection employerListContractor2 = new ArrayList();
+// employerListContractor2.add( employer );
+// contractor2.setEmployers( employerListContractor2 );
+//
+// s.flush();
+// s.clear();
+//
+// // assertions
+// employer = (Employer) s.get( Employer.class, employer.getId() );
+// assertNotNull( employer );
+// assertNotNull( employer.getContractors() );
+// assertEquals( 2, employer.getContractors().size() );
+// Contractor firstContractorFromDb = (Contractor)
employer.getContractors().iterator().next();
+// assertEquals( contractor2.getName(), firstContractorFromDb.getName() );
+// tx.rollback();
+// s.close();
+// }
+
+ public void testRemoveInBetween() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Employer er = new Employer();
+ Employee ee = new Employee();
+ Employee ee2 = new Employee();
+ s.persist( ee );
+ s.persist( ee2 );
+ Set erColl = new HashSet();
+ Collection eeColl = new ArrayList();
+ erColl.add( ee );
+ erColl.add( ee2 );
+ eeColl.add( er );
+ er.setEmployees( erColl );
+ ee.setEmployers( eeColl );
+ //s.persist(ee);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ er = (Employer) s.load( Employer.class, er.getId() );
+ assertNotNull( er );
+ assertNotNull( er.getEmployees() );
+ assertEquals( 2, er.getEmployees().size() );
+ Iterator iterator = er.getEmployees().iterator();
+ Employee eeFromDb = (Employee) iterator.next();
+ if ( eeFromDb.getId().equals( ee.getId() ) ) {
+ eeFromDb = (Employee) iterator.next();
+ }
+ assertEquals( ee2.getId(), eeFromDb.getId() );
+ er.getEmployees().remove( eeFromDb );
+ eeFromDb.getEmployers().remove( er );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ ee = (Employee) s.get( Employee.class, ee.getId() );
+ assertNotNull( ee );
+ assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized(
ee.getEmployers() ) );
+ tx.commit();
+ assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized(
ee.getEmployers() ) );
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ ee = (Employee) s.get( Employee.class, ee.getId() );
+ assertNotNull( ee );
+ er = ee.getEmployers().iterator().next();
+ assertTrue( "second join non lazy", Hibernate.isInitialized( er ) );
+ assertEquals( 1, er.getEmployees().size() );
+ s.delete( er );
+ s.delete( ee );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSelf() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Friend f = new Friend();
+ Friend sndF = new Friend();
+ f.setName( "Starsky" );
+ sndF.setName( "Hutch" );
+ Set frnds = new HashSet();
+ frnds.add( sndF );
+ f.setFriends( frnds );
+ //Starsky is a friend of Hutch but hutch is not
+ s.persist( f );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ f = (Friend) s.load( Friend.class, f.getId() );
+ assertNotNull( f );
+ assertNotNull( f.getFriends() );
+ assertEquals( 1, f.getFriends().size() );
+ Friend fromDb2ndFrnd = (Friend) f.getFriends().iterator().next();
+ assertEquals( fromDb2ndFrnd.getId(), sndF.getId() );
+ assertEquals( 0, fromDb2ndFrnd.getFriends().size() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositePk() throws Exception {
+ Session s;
+ Transaction tx;
+
+ ManPk m1pk = new ManPk();
+ m1pk.setElder( true );
+ m1pk.setFirstName( "Lucky" );
+ m1pk.setLastName( "Luke" );
+ ManPk m2pk = new ManPk();
+ m2pk.setElder( false );
+ m2pk.setFirstName( "Joe" );
+ m2pk.setLastName( "Dalton" );
+
+ Man m1 = new Man();
+ m1.setId( m1pk );
+ m1.setCarName( "Jolly Jumper" );
+ Man m2 = new Man();
+ m2.setId( m2pk );
+
+ WomanPk w1pk = new WomanPk();
+ w1pk.setFirstName( "Ma" );
+ w1pk.setLastName( "Dalton" );
+ WomanPk w2pk = new WomanPk();
+ w2pk.setFirstName( "Carla" );
+ w2pk.setLastName( "Bruni" );
+
+ Woman w1 = new Woman();
+ w1.setId( w1pk );
+ Woman w2 = new Woman();
+ w2.setId( w2pk );
+
+ Set<Woman> womens = new HashSet<Woman>();
+ womens.add( w1 );
+ m1.setWomens( womens );
+ Set<Woman> womens2 = new HashSet<Woman>();
+ womens2.add( w1 );
+ womens2.add( w2 );
+ m2.setWomens( womens2 );
+
+ Set<Man> mens = new HashSet<Man>();
+ mens.add( m1 );
+ mens.add( m2 );
+ w1.setMens( mens );
+ Set<Man> mens2 = new HashSet<Man>();
+ mens2.add( m2 );
+ w2.setMens( mens2 );
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( m1 );
+ s.persist( m2 );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ m1 = (Man) s.load( Man.class, m1pk );
+ assertFalse( m1.getWomens().isEmpty() );
+ assertEquals( 1, m1.getWomens().size() );
+ w1 = (Woman) s.load( Woman.class, w1pk );
+ assertFalse( w1.getMens().isEmpty() );
+ assertEquals( 2, w1.getMens().size() );
+
+ tx.commit();
+ s.close();
+ }
+
+ public void testAssociationTableUniqueConstraints() throws Exception {
+ Session s = openSession();
+ Permission readAccess = new Permission();
+ readAccess.setPermission( "read" );
+ readAccess.setExpirationDate( new Date() );
+ Collection<Permission> coll = new ArrayList<Permission>( 2 );
+ coll.add( readAccess );
+ coll.add( readAccess );
+ Group group = new Group();
+ group.setId( new Integer( 1 ) );
+ group.setPermissions( coll );
+ s.getTransaction().begin();
+ try {
+ s.persist( group );
+ s.getTransaction().commit();
+ fail( "Unique constraints not applied on association table" );
+ }
+ catch (JDBCException e) {
+ //success
+ s.getTransaction().rollback();
+ }
+ finally {
+ s.close();
+ }
+ }
+
+ public void testAssociationTableAndOrderBy() throws Exception {
+ Session s = openSession();
+ s.enableFilter( "Groupfilter" );
+ Permission readAccess = new Permission();
+ readAccess.setPermission( "read" );
+ readAccess.setExpirationDate( new Date() );
+ Permission writeAccess = new Permission();
+ writeAccess.setPermission( "write" );
+ writeAccess.setExpirationDate( new Date( new Date().getTime() - 10*60*1000 ) );
+ Collection<Permission> coll = new ArrayList<Permission>( 2 );
+ coll.add( readAccess );
+ coll.add( writeAccess );
+ Group group = new Group();
+ group.setId( new Integer( 1 ) );
+ group.setPermissions( coll );
+ s.getTransaction().begin();
+ s.persist( group );
+ s.flush();
+ s.clear();
+ group = (Group) s.get( Group.class, group.getId() );
+ s.createQuery( "select g from Group g join fetch g.permissions").list();
+ assertEquals( "write",
group.getPermissions().iterator().next().getPermission() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testAssociationTableAndOrderByWithSet() throws Exception {
+ Session s = openSession();
+ s.enableFilter( "Groupfilter" );
+
+ Permission readAccess = new Permission();
+ readAccess.setPermission( "read" );
+ readAccess.setExpirationDate( new Date() );
+
+ Permission writeAccess = new Permission();
+ writeAccess.setPermission( "write" );
+ writeAccess.setExpirationDate( new Date( new Date().getTime() - 10*60*1000 ) );
+
+ Permission executeAccess = new Permission();
+ executeAccess.setPermission( "execute" );
+ executeAccess.setExpirationDate( new Date( new Date().getTime() - 5*60*1000 ) );
+
+ Set<Permission> coll = new HashSet<Permission>( 3 );
+ coll.add( readAccess );
+ coll.add( writeAccess );
+ coll.add( executeAccess );
+
+ GroupWithSet group = new GroupWithSet();
+ group.setId( new Integer( 1 ) );
+ group.setPermissions( coll );
+ s.getTransaction().begin();
+ s.persist( group );
+ s.flush();
+ s.clear();
+
+ group = (GroupWithSet) s.get( GroupWithSet.class, group.getId() );
+ s.createQuery( "select g from Group g join fetch g.permissions").list();
+ Iterator<Permission> permIter = group.getPermissions().iterator();
+ assertEquals( "write", permIter.next().getPermission() );
+ assertEquals( "execute", permIter.next().getPermission() );
+ assertEquals( "read", permIter.next().getPermission() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testJoinedSubclassManyToMany() throws Exception {
+ Session s = openSession();
+ Zone a = new Zone();
+ InspectorPrefixes ip = new InspectorPrefixes( "dgi" );
+ Transaction tx = s.beginTransaction();
+ s.save( a );
+ s.save( ip );
+ ip.getAreas().add( a );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ ip = (InspectorPrefixes) s.get( InspectorPrefixes.class, ip.getId() );
+ assertNotNull( ip );
+ assertEquals( 1, ip.getAreas().size() );
+ assertEquals( a.getId(), ip.getAreas().get( 0 ).getId() );
+ s.delete( ip );
+ s.delete( ip.getAreas().get( 0 ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testJoinedSubclassManyToManyWithNonPkReference() throws Exception {
+ Session s = openSession();
+ Zone a = new Zone();
+ InspectorPrefixes ip = new InspectorPrefixes( "dgi" );
+ ip.setName( "Inspector" );
+ Transaction tx = s.beginTransaction();
+ s.save( a );
+ s.save( ip );
+ ip.getDesertedAreas().add( a );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ ip = (InspectorPrefixes) s.get( InspectorPrefixes.class, ip.getId() );
+ assertNotNull( ip );
+ assertEquals( 1, ip.getDesertedAreas().size() );
+ assertEquals( a.getId(), ip.getDesertedAreas().get( 0 ).getId() );
+ s.delete( ip );
+ s.delete( ip.getDesertedAreas().get( 0 ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testReferencedColumnNameToSuperclass() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ BuildingCompany comp = new BuildingCompany();
+ comp.setFoundedIn( new Date() );
+ comp.setName( "Builder century corp.");
+ s.persist( comp );
+ Building building = new Building();
+ building.setCompany( comp );
+ s.persist( building );
+ s.flush();
+ s.clear();
+ building = (Building) s.get( Building.class, building.getId() );
+ assertEquals( comp.getName(), building.getCompany().getName() );
+ tx.rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Friend.class,
+ Employer.class,
+ Employee.class,
+ Contractor.class,
+ Man.class,
+ Woman.class,
+ Store.class,
+ KnownClient.class,
+ Supplier.class,
+ City.class,
+ Cat.class,
+ Group.class,
+ GroupWithSet.class,
+ Permission.class,
+ Zone.class,
+ Inspector.class,
+ InspectorPrefixes.class,
+ BuildingCompany.class,
+ Building.class
+ };
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Permission.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Permission.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Permission.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,32 @@
+//$Id: Permission.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Permission {
+ private String permission;
+ private Date expirationDate;
+
+ @Id
+ public String getPermission() {
+ return permission;
+ }
+
+ public void setPermission(String permission) {
+ this.permission = permission;
+ }
+
+ public Date getExpirationDate() {
+ return expirationDate;
+ }
+
+ public void setExpirationDate(Date expirationDate) {
+ this.expirationDate = expirationDate;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Store.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Store.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Store.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,74 @@
+//$Id: Store.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Store {
+ private Integer id;
+ private String name;
+ private Set<KnownClient> customers;
+ private Set<Supplier> suppliers;
+
+ @ManyToMany(cascade = CascadeType.PERSIST)
+ public Set<City> getImplantedIn() {
+ return implantedIn;
+ }
+
+ public void setImplantedIn(Set<City> implantedIn) {
+ this.implantedIn = implantedIn;
+ }
+
+ private Set<City> implantedIn;
+
+ @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinTable(
+ name = "StoreSupplier",
+ joinColumns = @JoinColumn(name = "store"),
+ inverseJoinColumns = @JoinColumn(name = "supplier")
+ )
+ public Set<Supplier> getSuppliers() {
+ return suppliers;
+ }
+
+ public void setSuppliers(Set<Supplier> suppliers) {
+ this.suppliers = suppliers;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ public Set<KnownClient> getCustomers() {
+ return customers;
+ }
+
+ public void setCustomers(Set<KnownClient> customers) {
+ this.customers = customers;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Supplier.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Supplier.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Supplier.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$Id: Supplier.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Supplier {
+ private Integer id;
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ private Set<Store> suppStores;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToMany(mappedBy = "suppliers")
+ public Set<Store> getSuppStores() {
+ return suppStores;
+ }
+
+ public void setSuppStores(Set<Store> suppStores) {
+ this.suppStores = suppStores;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Woman.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Woman.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Woman.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,91 @@
+//$Id: Woman.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * Woman knowing several mens
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Woman implements Serializable {
+ private WomanPk id;
+ private String carName;
+ private Set<Man> mens;
+ private Set<Cat> cats;
+
+ @ManyToMany(mappedBy = "humanContacts")
+ public Set<Cat> getCats() {
+ return cats;
+ }
+
+ public void setCats(Set<Cat> cats) {
+ this.cats = cats;
+ }
+
+ @ManyToMany(cascade = {CascadeType.ALL})
+ @JoinTable(
+ name = "Man_Woman",
+ joinColumns = {
+ @JoinColumn(name = "womanLastName", referencedColumnName =
"lastName"),
+ @JoinColumn(name = "womanFirstName", referencedColumnName =
"firstName")
+ },
+ inverseJoinColumns = {
+ @JoinColumn(name = "manIsElder", referencedColumnName = "elder"),
+ @JoinColumn(name = "manLastName", referencedColumnName =
"lastName"),
+ @JoinColumn(name = "manFirstName", referencedColumnName =
"firstName")
+ }
+ )
+ @ForeignKey(name = "WM_W_FK", inverseName = "WM_M_FK")
+ public Set<Man> getMens() {
+ return mens;
+ }
+
+ public void setMens(Set<Man> mens) {
+ this.mens = mens;
+ }
+
+ @Id
+ public WomanPk getId() {
+ return id;
+ }
+
+ public void setId(WomanPk id) {
+ this.id = id;
+ }
+
+ public String getCarName() {
+ return carName;
+ }
+
+ public void setCarName(String carName) {
+ this.carName = carName;
+ }
+
+
+ public int hashCode() {
+ //a NPE can occurs, but I don't expect hashcode to be used before pk is set
+ return getId().hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //a NPE can occurs, but I don't expect equals to be used before pk is set
+ if ( obj != null && obj instanceof Woman ) {
+ return getId().equals( ( (Woman) obj ).getId() );
+ }
+ else {
+ return false;
+ }
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/WomanPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/WomanPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/WomanPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: WomanPk.java 16343 2009-04-15 18:33:43Z gbadner $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class WomanPk implements Serializable {
+
+
+ private String firstName;
+ private String lastName;
+
+ public int hashCode() {
+ //this implem sucks
+ return getFirstName().hashCode() + getLastName().hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //firstName and lastName are expected to be set in this implem
+ if ( obj != null && obj instanceof WomanPk ) {
+ WomanPk other = (WomanPk) obj;
+ return getFirstName().equals( other.getFirstName() )
+ && getLastName().equals( other.getLastName() );
+ }
+ else {
+ return false;
+ }
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ @Column(length=128)
+ public String getFirstName() {
+ return firstName;
+ }
+
+ @Column(length=128)
+ public String getLastName() {
+ return lastName;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Zone.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Zone.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytomany/Zone.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: Zone.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytomany;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Zone {
+ private Integer id;
+
+ @Id
+ @GeneratedValue
+ @Column(name = "id")
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/BiggestForest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/BiggestForest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/BiggestForest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: BiggestForest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class BiggestForest {
+ private Integer id;
+ private ForestType type;
+
+ @Id @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @OneToOne(mappedBy = "biggestRepresentative")
+ public ForestType getType() {
+ return type;
+ }
+
+ public void setType(ForestType type) {
+ this.type = type;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Car.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Car.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Car.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id: Car.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * Many to one sample using default mapping values
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Car {
+ private Integer id;
+ private Color bodyColor;
+ private Parent owner;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToOne(fetch = FetchType.EAGER)
+ @ForeignKey(name="BODY_COLOR_FK")
+ public Color getBodyColor() {
+ return bodyColor;
+ }
+
+ public void setBodyColor(Color bodyColor) {
+ this.bodyColor = bodyColor;
+ }
+
+ @ManyToOne
+ public Parent getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Parent owner) {
+ this.owner = owner;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Carz.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Carz.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Carz.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,124 @@
+//$Id: Carz.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.Column;
+import javax.persistence.JoinColumns;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.TemporalType;
+import javax.persistence.Id;
+import javax.persistence.Temporal;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Carz implements Serializable {
+ @Id
+ private Integer id;
+
+ @Column( name = "make", nullable = false )
+ private String make;
+
+ @Column( name = "model", nullable = false )
+ private String model;
+
+ @Column( name = "manufactured", nullable = false )
+ @Temporal( TemporalType.TIMESTAMP )
+ private Date manufactured;
+
+ @ManyToOne( fetch = FetchType.LAZY )
+ @JoinColumn( name = "loc_code", referencedColumnName = "loc_code" )
+ private Lotz lot;
+
+ public Carz() {
+ }
+
+ public Integer getId() {
+ return this.id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Lotz getLot() {
+ return this.lot;
+ }
+
+ public void setLot(Lotz lot) {
+ this.lot = lot;
+ }
+
+ public String getMake() {
+ return this.make;
+ }
+
+ public void setMake(String make) {
+ this.make = make;
+ }
+
+ public Date getManufactured() {
+ return this.manufactured;
+ }
+
+ public void setManufactured(Date manufactured) {
+ this.manufactured = manufactured;
+ }
+
+ public String getModel() {
+ return this.model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + ( ( this.id == null ) ?
+ 0 :
+ this.id.hashCode() );
+ result = PRIME * result + ( ( this.make == null ) ?
+ 0 :
+ this.make.hashCode() );
+ result = PRIME * result + ( ( this.manufactured == null ) ?
+ 0 :
+ this.manufactured.hashCode() );
+ result = PRIME * result + ( ( this.model == null ) ?
+ 0 :
+ this.model.hashCode() );
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+ final Carz other = (Carz) obj;
+ if ( this.id == null ) {
+ if ( other.id != null ) return false;
+ }
+ else if ( !this.id.equals( other.id ) ) return false;
+ if ( this.make == null ) {
+ if ( other.make != null ) return false;
+ }
+ else if ( !this.make.equals( other.make ) ) return false;
+ if ( this.manufactured == null ) {
+ if ( other.manufactured != null ) return false;
+ }
+ else if ( !this.manufactured.equals( other.manufactured ) ) return false;
+ if ( this.model == null ) {
+ if ( other.model != null ) return false;
+ }
+ else if ( !this.model.equals( other.model ) ) return false;
+ return true;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Child.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Child.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Child.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,32 @@
+//$Id: Child.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ * TODO: change this sample with an Address -> Country relation. This is more
accurate
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_child")
+public class Child implements Serializable {
+ @Id
+ @GeneratedValue
+ public Integer id;
+
+ @ManyToOne()
+ @JoinColumns({
+ @JoinColumn(name = "parentCivility", referencedColumnName =
"isMale"),
+ @JoinColumn(name = "parentLastName", referencedColumnName =
"lastName"),
+ @JoinColumn(name = "parentFirstName", referencedColumnName =
"firstName")
+ })
+ public Parent parent;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Color.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Color.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Color.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: Color.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Color showing a surrogate key and a unique constraint to ensure business rule
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Color {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(unique = true)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Customer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Customer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Customer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,16 @@
+//$Id: Customer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity(name="DealedCustomer")
+public class Customer implements Serializable {
+ @Id @GeneratedValue public Integer id;
+ public String userId;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Deal.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Deal.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Deal.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+//$Id: Deal.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Deal {
+ @Id @GeneratedValue public Integer id;
+ @ManyToOne @JoinColumn(referencedColumnName = "userId") public Customer from;
+ @ManyToOne @JoinColumn(referencedColumnName = "userId") public Customer to;
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/DistrictUser.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/DistrictUser.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/DistrictUser.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "CLRUS2DI")
+public class DistrictUser {
+ @Id
+ @GeneratedValue
+ @Column(name = "CLRUS2DI_KEY")
+ private Long id;
+
+ @Column(name = "CLRUS2DI_CREATE_USERS_KEY")
+ private Long createdBy;
+
+ @Column(name = "CLRUS2DI_CREATE_DATE")
+ private Date createdOn;
+
+ //@ManyToOne(cascade = CascadeType.ALL)
+ //@JoinColumn(name = "CLRUS2DI_DISTR_KEY")
+ //private District district;
+
+ @ManyToOne(cascade = CascadeType.ALL)
+ @JoinColumns({@JoinColumn(name = "CLRUS2DI_USERS_KEY", referencedColumnName =
"CTVUSERS_KEY"),
+ @JoinColumn(name = "CLRUS2DI_BEGIN_DATE", referencedColumnName =
"CTVUSERS_START_DATE"),
+ @JoinColumn(name = "CLRUS2DI_END_DATE", referencedColumnName =
"CTVUSERS_END_DATE")})
+ private User user;
+
+ @Column(name = "CLRUS2DI_LDTMD_KEY")
+ private Long ldtmd;
+
+ @Column(name = "CLRUS2DI_PMTMP_KEY")
+ private Long pmtmp;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ForestType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ForestType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ForestType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,66 @@
+//$Id: ForestType.java 15074 2008-08-14 17:38:00Z epbernard $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.JoinTable;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class ForestType {
+ private Integer id;
+ private String name;
+ private Set<TreeType> trees;
+ private BiggestForest biggestRepresentative;
+
+ @OneToOne
+ @JoinTable(name="BiggestRepPerForestType",
+ joinColumns = @JoinColumn(name="forest_type"),
+ inverseJoinColumns = @JoinColumn(name="forest")
+ )
+ @ForeignKey(name="A_TYP_FK",
+ inverseName = "A_FOR_FK" //inverse fail cause it involves a Join
+ )
+ public BiggestForest getBiggestRepresentative() {
+ return biggestRepresentative;
+ }
+
+ public void setBiggestRepresentative(BiggestForest biggestRepresentative) {
+ this.biggestRepresentative = biggestRepresentative;
+ }
+
+ @OneToMany(mappedBy="forestType")
+ public Set<TreeType> getTrees() {
+ return trees;
+ }
+
+ public void setTrees(Set<TreeType> trees) {
+ this.trees = trees;
+ }
+
+ @Id @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Frame.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Frame.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Frame.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id: Frame.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Set;
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Frame implements Serializable {
+ @Id
+ @GeneratedValue
+ private Long id;
+ @OneToMany( mappedBy = "frame" )
+ private Set<Lens> lenses;
+ private String name;
+ @Formula("lower(name)")
+ private String lowerName;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Set<Lens> getLenses() {
+ return lenses;
+ }
+
+ public void setLenses(Set<Lens> lenses) {
+ this.lenses = lenses;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lens.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lens.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lens.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+//$Id: Lens.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Lens {
+ @Id
+ @GeneratedValue
+ private Long id;
+ private float focal;
+ @Formula("(1/focal)")
+ private float length;
+ @ManyToOne()
+ @JoinColumn(name="`frame_fk`", referencedColumnName = "name")
+ private Frame frame;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public float getFocal() {
+ return focal;
+ }
+
+ public void setFocal(float focal) {
+ this.focal = focal;
+ }
+
+ public float getLength() {
+ return length;
+ }
+
+ public void setLength(float length) {
+ this.length = length;
+ }
+
+ public Frame getFrame() {
+ return frame;
+ }
+
+ public void setFrame(Frame frame) {
+ this.frame = frame;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lotz.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lotz.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Lotz.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,101 @@
+//$Id: Lotz.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.List;
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Column;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+import javax.persistence.CascadeType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Lotz implements Serializable {
+ @EmbeddedId
+ protected LotzPK lotPK;
+
+ @Column( name = "name", nullable = false )
+ private String name;
+
+ @Column( name = "location", nullable = false )
+ private String location;
+
+ @OneToMany( mappedBy = "lot", fetch = FetchType.LAZY, cascade =
CascadeType.ALL )
+ private List<Carz> cars;
+
+ public Lotz() {
+ }
+
+ public List<Carz> getCars() {
+ return this.cars;
+ }
+
+ public void setCars(List<Carz> cars) {
+ this.cars = cars;
+ }
+
+ public String getLocation() {
+ return this.location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public LotzPK getLotPK() {
+ return this.lotPK;
+ }
+
+ public void setLotPK(LotzPK lotPK) {
+ this.lotPK = lotPK;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + ( ( this.location == null ) ?
+ 0 :
+ this.location.hashCode() );
+ result = PRIME * result + ( ( this.lotPK == null ) ?
+ 0 :
+ this.lotPK.hashCode() );
+ result = PRIME * result + ( ( this.name == null ) ?
+ 0 :
+ this.name.hashCode() );
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+ final Lotz other = (Lotz) obj;
+ if ( this.location == null ) {
+ if ( other.location != null ) return false;
+ }
+ else if ( !this.location.equals( other.location ) ) return false;
+ if ( this.lotPK == null ) {
+ if ( other.lotPK != null ) return false;
+ }
+ else if ( !this.lotPK.equals( other.lotPK ) ) return false;
+ if ( this.name == null ) {
+ if ( other.name != null ) return false;
+ }
+ else if ( !this.name.equals( other.name ) ) return false;
+ return true;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/LotzPK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/LotzPK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/LotzPK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: LotzPK.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class LotzPK implements Serializable {
+ @Column( name = "id", nullable = false )
+ private Integer id;
+
+ @Column( name = "loc_code", nullable = false, unique = true )
+ private String locCode;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getLocCode() {
+ return locCode;
+ }
+
+ public void setLocCode(String locCode) {
+ this.locCode = locCode;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: ManyToOneJoinTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneJoinTest extends TestCase {
+ public void testManyToOneJoinTable() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ ForestType forest = new ForestType();
+ forest.setName( "Original forest" );
+ s.persist( forest );
+ TreeType tree = new TreeType();
+ tree.setForestType( forest );
+ tree.setAlternativeForestType( forest );
+ tree.setName( "just a tree");
+ s.persist( tree );
+ s.flush();
+ s.clear();
+ tree = (TreeType) s.get(TreeType.class, tree.getId() );
+ assertNotNull( tree.getForestType() );
+ assertNotNull( tree.getAlternativeForestType() );
+ s.clear();
+ forest = (ForestType) s.get( ForestType.class, forest.getId() );
+ assertEquals( 1, forest.getTrees().size() );
+ assertEquals( tree.getId(), forest.getTrees().iterator().next().getId() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testOneToOneJoinTable() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ ForestType forest = new ForestType();
+ forest.setName( "Original forest" );
+ s.persist( forest );
+ BiggestForest forestRepr = new BiggestForest();
+ forestRepr.setType( forest );
+ forest.setBiggestRepresentative( forestRepr );
+ s.persist( forestRepr );
+ s.flush();
+ s.clear();
+ forest = (ForestType) s.get( ForestType.class, forest.getId() );
+ assertNotNull( forest.getBiggestRepresentative() );
+ assertEquals( forest, forest.getBiggestRepresentative().getType() );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ BiggestForest.class,
+ ForestType.class,
+ TreeType.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: ManyToOneOnNonPkTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Date;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+
+/**
+ * FIXME test for ANN-548
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneOnNonPkTest extends TestCase {
+
+ public void testNonPkPartOfPk() throws Exception {
+// Session s = openSession( );
+// s.getTransaction().begin();
+//
+// LotzPK pk = new LotzPK();
+// pk.setId( 1 );
+// pk.setLocCode( "fr" );
+// Lotz lot = new Lotz();
+// lot.setLocation( "France" );
+// lot.setName( "Chez Dede" );
+// lot.setLotPK( pk );
+// Carz car = new Carz();
+// car.setId( 1 );
+// car.setLot( lot );
+// car.setMake( "Citroen" );
+// car.setManufactured( new Date() );
+// car.setModel( "C5" );
+// s.persist( lot );
+// s.persist( car );
+//
+// s.flush();
+// s.clear();
+// s.clear();
+//
+// car = (Carz) s.createQuery( "from Carz car left join fetch
car.lot").uniqueResult();
+// assertNotNull( car.getLot() );
+//
+// s.getTransaction().commit();
+// s.close();
+//
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ //Carz.class,
+ //Lotz.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ManyToOneTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,346 @@
+//$Id: ManyToOneTest.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.hibernate.Hibernate;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Company;
+import org.hibernate.test.annotations.Customer;
+import org.hibernate.test.annotations.Discount;
+import org.hibernate.test.annotations.Flight;
+import org.hibernate.test.annotations.Passport;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.Ticket;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneTest extends TestCase {
+
+ public ManyToOneTest(String x) {
+ super( x );
+ }
+
+ public void testEager() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Color c = new Color();
+ c.setName( "Yellow" );
+ s.persist( c );
+ Car car = new Car();
+ car.setBodyColor( c );
+ s.persist( car );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ car = (Car) s.get( Car.class, car.getId() );
+ tx.commit();
+ s.close();
+ assertNotNull( car );
+ assertNotNull( car.getBodyColor() );
+ assertEquals( "Yellow", car.getBodyColor().getName() );
+
+ }
+
+ public void testDefaultMetadata() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Color c = new Color();
+ c.setName( "Blue" );
+ s.persist( c );
+ Car car = new Car();
+ car.setBodyColor( c );
+ s.persist( car );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ car = (Car) s.get( Car.class, car.getId() );
+ assertNotNull( car );
+ assertNotNull( car.getBodyColor() );
+ assertEquals( c.getId(), car.getBodyColor().getId() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testCreate() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Flight firstOne = new Flight();
+ firstOne.setId( new Long( 1 ) );
+ firstOne.setName( "AF0101" );
+ firstOne.setDuration( new Long( 1000 ) );
+ Company frenchOne = new Company();
+ frenchOne.setName( "Air France" );
+ firstOne.setCompany( frenchOne );
+ s.persist( firstOne );
+ tx.commit();
+ s.close();
+ assertNotNull( "identity id should work", frenchOne.getId() );
+
+ s = openSession();
+ tx = s.beginTransaction();
+ firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+ assertNotNull( firstOne.getCompany() );
+ assertEquals( frenchOne.getName(), firstOne.getCompany().getName() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCascade() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Discount discount = new Discount();
+ discount.setDiscount( 20.12 );
+ Customer customer = new Customer();
+ Collection discounts = new ArrayList();
+ discounts.add( discount );
+ customer.setName( "Quentin Tarantino" );
+ discount.setOwner( customer );
+ customer.setDiscountTickets( discounts );
+ s.persist( discount );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ discount = (Discount) s.get( Discount.class, discount.getId() );
+ assertNotNull( discount );
+ assertEquals( 20.12, discount.getDiscount() );
+ assertNotNull( discount.getOwner() );
+ customer = new Customer();
+ customer.setName( "Clooney" );
+ discount.setOwner( customer );
+ discounts = new ArrayList();
+ discounts.add( discount );
+ customer.setDiscountTickets( discounts );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ discount = (Discount) s.get( Discount.class, discount.getId() );
+ assertNotNull( discount );
+ assertNotNull( discount.getOwner() );
+ assertEquals( "Clooney", discount.getOwner().getName() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ customer = (Customer) s.get( Customer.class, customer.getId() );
+ s.delete( customer );
+ tx.commit();
+ s.close();
+ }
+
+ public void testFetch() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Discount discount = new Discount();
+ discount.setDiscount( 20 );
+ Customer customer = new Customer();
+ Collection discounts = new ArrayList();
+ discounts.add( discount );
+ customer.setName( "Quentin Tarantino" );
+ discount.setOwner( customer );
+ customer.setDiscountTickets( discounts );
+ s.persist( discount );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ discount = (Discount) s.get( Discount.class, discount.getId() );
+ assertNotNull( discount );
+ assertFalse( Hibernate.isInitialized( discount.getOwner() ) );
+ tx.commit();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ discount = (Discount) s.load( Discount.class, discount.getId() );
+ assertNotNull( discount );
+ assertFalse( Hibernate.isInitialized( discount.getOwner() ) );
+ tx.commit();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete( s.get( Discount.class, discount.getId() ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCompositeFK() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ ParentPk ppk = new ParentPk();
+ ppk.firstName = "John";
+ ppk.lastName = "Doe";
+ Parent p = new Parent();
+ p.age = 45;
+ p.id = ppk;
+ s.persist( p );
+ Child c = new Child();
+ c.parent = p;
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ //FIXME: fix this when the small parser bug will be fixed
+ Query q = s.createQuery( "from " + Child.class.getName() ); //+ " c
where c.parent.id.lastName = :lastName");
+ //q.setString("lastName", p.id.lastName);
+ List result = q.list();
+ assertEquals( 1, result.size() );
+ Child c2 = (Child) result.get( 0 );
+ assertEquals( c2.id, c.id );
+ tx.commit();
+ s.close();
+ }
+
+ public void testImplicitCompositeFk() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Node n1 = new Node();
+ n1.setDescription( "Parent" );
+ NodePk n1pk = new NodePk();
+ n1pk.setLevel( 1 );
+ n1pk.setName( "Root" );
+ n1.setId( n1pk );
+ Node n2 = new Node();
+ NodePk n2pk = new NodePk();
+ n2pk.setLevel( 2 );
+ n2pk.setName( "Level 1: A" );
+ n2.setParent( n1 );
+ n2.setId( n2pk );
+ s.persist( n2 );
+ tx.commit();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ n2 = (Node) s.get( Node.class, n2pk );
+ assertNotNull( n2 );
+ assertNotNull( n2.getParent() );
+ assertEquals( 1, n2.getParent().getId().getLevel() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOneNonPk() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Order order = new Order();
+ order.setOrderNbr( "123" );
+ s.persist( order );
+ OrderLine ol = new OrderLine();
+ ol.setItem( "Mouse" );
+ ol.setOrder( order );
+ s.persist( ol );
+ s.flush();
+ s.clear();
+ ol = (OrderLine) s.get( OrderLine.class, ol.getId() );
+ assertNotNull( ol.getOrder() );
+ assertEquals( "123", ol.getOrder().getOrderNbr() );
+ assertTrue( ol.getOrder().getOrderLines().contains( ol ) );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testTwoManyToOneNonPk() throws Exception {
+ //2 many to one non pk pointing to the same referencedColumnName should not fail
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ org.hibernate.test.annotations.manytoone.Customer customer = new
org.hibernate.test.annotations.manytoone.Customer();
+ customer.userId="123";
+ org.hibernate.test.annotations.manytoone.Customer customer2 = new
org.hibernate.test.annotations.manytoone.Customer();
+ customer2.userId="124";
+ s.persist( customer2 );
+ s.persist( customer );
+ Deal deal = new Deal();
+ deal.from = customer;
+ deal.to = customer2;
+ s.persist( deal );
+ s.flush();
+ s.clear();
+ deal = (Deal) s.get( Deal.class, deal.id );
+ assertNotNull( deal.from );
+ assertNotNull( deal.to );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testFormulaOnOtherSide() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Frame frame = new Frame();
+ frame.setName( "Prada" );
+ s.persist( frame );
+ Lens l = new Lens();
+ l.setFocal( 2.5f );
+ l.setFrame( frame );
+ s.persist( l );
+ Lens r = new Lens();
+ r.setFocal( 1.2f);
+ r.setFrame( frame );
+ s.persist( r );
+ s.flush();
+ s.clear();
+ frame = (Frame) s.get( Frame.class, frame.getId() );
+ assertEquals( 2, frame.getLenses().size() );
+ assertTrue( frame.getLenses().iterator().next().getLength() <= 1/1.2f );
+ assertTrue( frame.getLenses().iterator().next().getLength() >= 1/2.5f );
+ tx.rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected java.lang.Class[] getMappings() {
+ return new java.lang.Class[]{
+ Deal.class,
+ org.hibernate.test.annotations.manytoone.Customer.class,
+ Car.class,
+ Color.class,
+ Flight.class,
+ Company.class,
+ Customer.class,
+ Discount.class,
+ Ticket.class,
+ Passport.class,
+ Parent.class,
+ Child.class,
+ Node.class,
+ User.class,
+ DistrictUser.class,
+ Order.class,
+ OrderLine.class,
+ Frame.class,
+ Lens.class
+ };
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Node.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Node.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Node.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,68 @@
+//$Id: Node.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Node implements Serializable {
+
+ private NodePk id;
+ private String description;
+ private Node parent;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Node ) ) return false;
+
+ final Node node = (Node) o;
+
+ if ( !id.equals( node.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+
+ @Id
+ public NodePk getId() {
+ return id;
+ }
+
+ public void setId(NodePk id) {
+ this.id = id;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @JoinColumns({
+ @JoinColumn(name = "parentName"),
+ @JoinColumn(name = "parentLevel")
+ })
+ public Node getParent() {
+ return parent;
+ }
+
+ public void setParent(Node parent) {
+ this.parent = parent;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/NodePk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/NodePk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/NodePk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id: NodePk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class NodePk implements Serializable {
+ private String name;
+ private int level;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof NodePk ) ) return false;
+
+ final NodePk nodePk = (NodePk) o;
+
+ if ( level != nodePk.level ) return false;
+ if ( !name.equals( nodePk.name ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = name.hashCode();
+ result = 29 * result + level;
+ return result;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Column(name = "fld_lvl")
+ public int getLevel() {
+ return level;
+ }
+
+ public void setLevel(int level) {
+ this.level = level;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Order.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Order.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Order.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: Order.java 17529 2009-09-19 19:59:46Z stliu $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.Table;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name="ORDERS")
+public class Order implements Serializable {
+ private Integer id;
+ private String orderNbr;
+ private Set<OrderLine> orderLines;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(name="order_nbr")
+ public String getOrderNbr() {
+ return orderNbr;
+ }
+
+ public void setOrderNbr(String orderNbr) {
+ this.orderNbr = orderNbr;
+ }
+
+ @OneToMany(mappedBy = "order")
+ public Set<OrderLine> getOrderLines() {
+ return orderLines;
+ }
+
+ public void setOrderLines(Set<OrderLine> orderLines) {
+ this.orderLines = orderLines;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/OrderLine.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/OrderLine.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/OrderLine.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+//$Id: OrderLine.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class OrderLine {
+ private Integer id;
+ private String item;
+ private Order order;
+
+ @Id @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getItem() {
+ return item;
+ }
+
+ public void setItem(String item) {
+ this.item = item;
+ }
+
+ @ManyToOne
+ @JoinColumn(name="order_nbr", referencedColumnName = "order_nbr",
unique = true)
+ public Order getOrder() {
+ return order;
+ }
+
+ public void setOrder(Order order) {
+ this.order = order;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Parent.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Parent.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/Parent.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Parent.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "tbl_parent")
+public class Parent implements Serializable {
+ @Id
+ public ParentPk id;
+ public int age;
+
+ public int hashCode() {
+ //a NPE can occurs, but I don't expect hashcode to be used before pk is set
+ return id.hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //a NPE can occurs, but I don't expect equals to be used before pk is set
+ if ( obj != null && obj instanceof Parent ) {
+ return id.equals( ( (Parent) obj ).id );
+ }
+ else {
+ return false;
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ParentPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ParentPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/ParentPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: ParentPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class ParentPk implements Serializable {
+ @Column(length = 50)
+ String firstName;
+ String lastName;
+
+ /**
+ * is a male or a female
+ */
+ //show hetereogenous PK types
+ boolean isMale;
+
+ public int hashCode() {
+ //this implem sucks
+ return firstName.hashCode() + lastName.hashCode() + ( isMale ? 0 : 1 );
+ }
+
+ public boolean equals(Object obj) {
+ //firstName and lastName are expected to be set in this implem
+ if ( obj != null && obj instanceof ParentPk ) {
+ ParentPk other = (ParentPk) obj;
+ return firstName.equals( other.firstName )
+ && lastName.equals( other.lastName )
+ && isMale == other.isMale;
+ }
+ else {
+ return false;
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/TreeType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/TreeType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/TreeType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,61 @@
+//$Id: TreeType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinTable;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.JoinColumn;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class TreeType {
+ private Integer id;
+ private String name;
+ private ForestType forestType;
+ private ForestType alternativeForestType;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinTable(name="Tree_Forest")
+ public ForestType getForestType() {
+ return forestType;
+ }
+
+ public void setForestType(ForestType forestType) {
+ this.forestType = forestType;
+ }
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinTable(name="Atl_Forest_Type",
+ joinColumns = @JoinColumn(name="tree_id"),
+ inverseJoinColumns = @JoinColumn(name="forest_id") )
+ public ForestType getAlternativeForestType() {
+ return alternativeForestType;
+ }
+
+ public void setAlternativeForestType(ForestType alternativeForestType) {
+ this.alternativeForestType = alternativeForestType;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/User.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/User.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/User.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,113 @@
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Date;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "CTVUSERS")
+(a)IdClass(UserPK.class)
+@SequenceGenerator(name = "UserSeq", sequenceName = "SQ_USER")
+public class User {
+ @Id
+ @Column(name = "CTVUSERS_KEY")
+ private Long userKey;
+
+ @Id
+ @Column(name = "CTVUSERS_START_DATE")
+ private Date startDate;
+
+ @Id
+ @Column(name = "CTVUSERS_END_DATE")
+ private Date endDate;
+
+ @Column(name = "CTVUSERS_CREATE_USERS_KEY")
+ private Long createdBy;
+
+ @Column(name = "CTVUSERS_CREATE_DATE")
+ private Date createdOn;
+
+ @Column(name = "CTVUSERS_ID")
+ private String userId;
+
+ @Column(name = "CTVUSERS_PREFX_KEY")
+ private Integer prefix;
+
+ @Column(name = "CTVUSERS_FIRST_NAME")
+ private String firstName;
+
+ @Column(name = "CTVUSERS_LAST_NAME1")
+ private String lastName1;
+
+ @Column(name = "CTVUSERS_LAST_NAME2")
+ private String lastName2;
+
+ @Column(name = "CTVUSERS_MIDDLE_NAME1")
+ private String middleName1;
+
+ @Column(name = "CTVUSERS_MIDDLE_NAME2")
+ private String middleName2;
+
+ @Column(name = "CTVUSERS_SUFFX_KEY")
+ private Integer suffix;
+
+ @Column(name = "CTVUSERS_BIRTH_DATE")
+ private Date birthDate;
+
+ @Column(name = "CTVUSERS_BIRTH_STATE_KEY")
+ private Integer birthState;
+
+ @Column(name = "CTVUSERS_BIRTH_CNTRY_KEY")
+ private Integer birthCountry;
+
+ @Column(name = "CTVUSERS_USERNAME")
+ private String username;
+
+ @Column(name = "CTVUSERS_PASSWORD")
+ private String password;
+
+ @Column(name = "CTVUSERS_LOTYP_KEY")
+ private Integer userType;
+
+ @Column(name = "CTVUSERS_PRIVL_KEY")
+ private Integer privilege;
+
+ @Column(name = "CTVUSERS_STATE_KEY")
+ private Integer state;
+
+ @Column(name = "CTVUSERS_CNTRY_KEY")
+ private Integer country;
+
+ @Column(name = "CTVUSERS_PREFERRED_NAME")
+ private String preferredName;
+
+ @Column(name = "CTVUSERS_BIRTH_PLACE")
+ private String birthPlace;
+
+ @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy =
"user")
+ private Set<DistrictUser> districtUsers;
+
+ @Column(name = "CTVUSERS_SCHOL_KEY")
+ private Long school;
+
+ @Column(name = "CTVUSERS_CLSTR_KEY")
+ private Long cluster;
+
+ @Column(name = "CTVUSERS_LDTMM_KEY")
+ private Long ldtmm;
+
+ @Column(name = "CTVUSERS_LDTMD_KEY")
+ private Long ldtmd;
+
+ @Column(name = "CTVUSERS_PMTMP_KEY")
+ private Long pmtmp;
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/UserPK.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/UserPK.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/UserPK.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import javax.persistence.Column;
+
+public class UserPK implements Serializable {
+ private static final long serialVersionUID = -7720874756224520523L;
+ @Column(name = "CTVUSERS_KEY")
+ public Long userKey;
+
+ @Column(name = "CTVUSERS_START_DATE")
+ public Date startDate;
+
+
+ @Column(name = "CTVUSERS_END_DATE")
+ public Date endDate;
+
+ public UserPK() {
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( !( obj instanceof UserPK ) ) {
+ return false;
+ }
+ UserPK userPK = (UserPK) obj;
+ SimpleDateFormat formatter = new SimpleDateFormat( "MM/dd/yyyy" );
+ return userKey.equals( userPK.userKey ) && formatter.format( startDate )
+ .equals( formatter.format( userPK.startDate ) )
+ && formatter.format( endDate ).equals( formatter.format( userPK.endDate ) );
+ }
+
+ @Override
+ public int hashCode() {
+ return userKey.hashCode() * startDate.hashCode() * endDate.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/GenericObject.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/GenericObject.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/GenericObject.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,68 @@
+//$
+package org.hibernate.test.annotations.manytoone.referencedcolumnname;
+
+import java.io.Serializable;
+import java.rmi.server.UID;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+@MappedSuperclass
+public class GenericObject implements Serializable {
+ protected int id;
+ protected int version;
+ protected UID uid = new UID();
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.IDENTITY )
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @Version
+ public int getVersion() {
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ public void incrementVersion() {
+ this.version++;
+ }
+
+ public boolean equals(Object other) {
+ if ( this == other )
+ return true;
+ if ( ( other == null ) || !( other.getClass().equals( this.getClass() ) ) )
+ return false;
+ GenericObject anObject = (GenericObject) other;
+ if ( this.id == 0 || anObject.id == 0 )
+ return false;
+
+ return ( this.id == anObject.id );
+ }
+
+ public int hashCode() {
+ if ( this.id == 0 )
+ return super.hashCode();
+ return this.id;
+ }
+
+ @Transient
+ public UID getUid() {
+ return uid;
+ }
+
+ public void setUid(UID uid) {
+ this.uid = uid;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Item.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Item.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Item.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$
+package org.hibernate.test.annotations.manytoone.referencedcolumnname;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Transient;
+
+
+@Entity
+public class Item extends GenericObject {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ManyToOneReferencedColumnNameTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ManyToOneReferencedColumnNameTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ManyToOneReferencedColumnNameTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,55 @@
+//$
+package org.hibernate.test.annotations.manytoone.referencedcolumnname;
+
+import java.math.BigDecimal;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneReferencedColumnNameTest extends TestCase {
+ public void testReoverableExceptionInFkOrdering() throws Exception {
+ //SF should not blow up
+ Vendor v = new Vendor();
+ Item i = new Item();
+ ZItemCost ic = new ZItemCost();
+ ic.setCost( new BigDecimal(2) );
+ ic.setItem( i );
+ ic.setVendor( v );
+ WarehouseItem wi = new WarehouseItem();
+ wi.setDefaultCost( ic );
+ wi.setItem( i );
+ wi.setVendor( v );
+ wi.setQtyInStock( new BigDecimal(2) );
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.save( i );
+ s.save( v );
+ s.save( ic );
+ s.save( wi );
+ s.flush();
+ s.getTransaction().rollback();
+ s.close();
+
+ }
+
+
+
+ @Override
+ protected boolean runForCurrentDialect() {
+ return super.runForCurrentDialect() && getDialect().supportsIdentityColumns();
+ }
+
+
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Item.class,
+ Vendor.class,
+ WarehouseItem.class,
+ ZItemCost.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Vendor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Vendor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/Vendor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+//$
+package org.hibernate.test.annotations.manytoone.referencedcolumnname;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Transient;
+
+@Entity
+public class Vendor extends GenericObject {
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/WarehouseItem.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/WarehouseItem.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/WarehouseItem.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$
+package org.hibernate.test.annotations.manytoone.referencedcolumnname;
+
+import java.math.BigDecimal;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class WarehouseItem extends GenericObject {
+
+
+ Item item;
+ Vendor vendor;
+ ZItemCost defaultCost;
+ BigDecimal qtyInStock;
+
+
+ public BigDecimal getQtyInStock() {
+ return qtyInStock;
+ }
+
+ public void setQtyInStock(BigDecimal qtyInStock) {
+ this.qtyInStock = qtyInStock;
+ }
+
+ @ManyToOne
+//(fetch=FetchType.LAZY)
+ @JoinColumn( name = "ITEM_ID", unique = false, nullable = false, insertable =
true, updatable = true )
+ public Item getItem() {
+ return item;
+ }
+
+ public void setItem(Item item) {
+ this.item = item;
+ }
+
+ @ManyToOne( fetch = FetchType.LAZY )
+ @JoinColumn( name = "VENDOR_ID", unique = false, nullable = false, insertable
= true, updatable = true )
+ public Vendor getVendor() {
+ return vendor;
+ }
+
+ public void setVendor(Vendor vendor) {
+ this.vendor = vendor;
+ }
+
+ @ManyToOne
+ @JoinColumns( {
+ @JoinColumn( name = "vendor_id", referencedColumnName = "vendor_id",
insertable = false, updatable = false ),
+ @JoinColumn( name = "item_id", referencedColumnName = "item_id",
insertable = false, updatable = false )
+ } )
+ public ZItemCost getDefaultCost() {
+ return defaultCost;
+ }
+
+ public void setDefaultCost(ZItemCost defaultCost) {
+ this.defaultCost = defaultCost;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ZItemCost.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ZItemCost.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/manytoone/referencedcolumnname/ZItemCost.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$
+package org.hibernate.test.annotations.manytoone.referencedcolumnname;
+
+import java.math.BigDecimal;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.ManyToOne;
+import javax.persistence.Transient;
+import javax.persistence.JoinColumn;
+
+@Entity
+public class ZItemCost extends GenericObject {
+
+ Item item;
+ Vendor vendor;
+ BigDecimal cost;
+
+ @ManyToOne( fetch = FetchType.LAZY )
+ //@JoinColumn(name="ITEM_ID", unique=false, nullable=false, insertable=true,
updatable=true)
+ public Item getItem() {
+ return item;
+ }
+
+ public void setItem(Item item) {
+ this.item = item;
+ }
+
+ @ManyToOne( fetch = FetchType.LAZY )
+ //@JoinColumn(name="VENDOR_ID", unique=false, nullable=false, insertable=true,
updatable=true)
+ public Vendor getVendor() {
+ return vendor;
+ }
+
+ public void setVendor(Vendor vendor) {
+ this.vendor = vendor;
+ }
+
+ public BigDecimal getCost() {
+ return cost;
+ }
+
+ public void setCost(BigDecimal cost) {
+ this.cost = cost;
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Address.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Address.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Address.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+// $Id: Address.java 14741 2008-06-05 11:25:56Z hardy.ferentschik $
+package org.hibernate.test.annotations.namingstrategy;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class Address {
+
+ @Id
+ private long id;
+
+ @ManyToOne
+ @JoinTable(name = "person_address")
+ private Person person;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Person getPerson() {
+ return person;
+ }
+
+ public void setPerson(Person person) {
+ this.person = person;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/DummyNamingStrategy.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/DummyNamingStrategy.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/DummyNamingStrategy.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+// $Id: DummyNamingStrategy.java 14741 2008-06-05 11:25:56Z hardy.ferentschik $
+package org.hibernate.test.annotations.namingstrategy;
+
+import org.hibernate.cfg.EJB3NamingStrategy;
+
+@SuppressWarnings("serial")
+public class DummyNamingStrategy extends EJB3NamingStrategy {
+
+ public String tableName(String tableName) {
+ return "T" + tableName;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/NamingStrategyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/NamingStrategyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/NamingStrategyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+// $Id: NamingStrategyTest.java 14741 2008-06-05 11:25:56Z hardy.ferentschik $
+package org.hibernate.test.annotations.namingstrategy;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import junit.framework.TestCase;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test harness for ANN-716.
+ *
+ * @author Hardy Ferentschik
+ */
+public class NamingStrategyTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(NamingStrategyTest.class);
+
+ public void testWithCustomNamingStrategy() throws Exception {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.setNamingStrategy(new DummyNamingStrategy());
+ config.addAnnotatedClass(Address.class);
+ config.addAnnotatedClass(Person.class);
+ config.buildSessionFactory();
+ }
+ catch( Exception e ) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+
+ public void testWithoutCustomNamingStrategy() throws Exception {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(Address.class);
+ config.addAnnotatedClass(Person.class);
+ config.buildSessionFactory();
+ }
+ catch( Exception e ) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ log.debug(writer.toString());
+ fail(e.getMessage());
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Person.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Person.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/namingstrategy/Person.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+// $Id: Person.java 14741 2008-06-05 11:25:56Z hardy.ferentschik $
+package org.hibernate.test.annotations.namingstrategy;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+@Entity
+public class Person {
+
+ @Id
+ private long id;
+
+ @OneToMany(mappedBy = "person")
+ private Set<Address> addresses = new HashSet<Address>();
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Set<Address> getAddresses() {
+ return addresses;
+ }
+
+ public void setAddresses(Set<Address> addresses) {
+ this.addresses = addresses;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/Citizen.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/Citizen.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/Citizen.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,67 @@
+//$Id: Citizen.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.naturalid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.NaturalId;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Citizen {
+ @Id
+ @GeneratedValue
+ private Integer id;
+ private String firstname;
+ private String lastname;
+ @NaturalId
+ @ManyToOne
+ private State state;
+ @NaturalId
+ private String ssn;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public State getState() {
+ return state;
+ }
+
+ public void setState(State state) {
+ this.state = state;
+ }
+
+ public String getSsn() {
+ return ssn;
+ }
+
+ public void setSsn(String ssn) {
+ this.ssn = ssn;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,42 @@
+package org.hibernate.test.annotations.naturalid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.NaturalId;
+
+@Entity
+/**
+ * Test case for NaturalId annotation - ANN-750
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+class NaturalIdOnManyToOne {
+
+ @Id
+ @GeneratedValue
+ int id;
+
+ @NaturalId
+ @ManyToOne
+ Citizen citizen;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Citizen getCitizen() {
+ return citizen;
+ }
+
+ public void setCitizen(Citizen citizen) {
+ this.citizen = citizen;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,95 @@
+//$Id: NaturalIdOnSingleManyToOneTest.java 14786 2008-06-19 14:59:11Z hardy.ferentschik
$
+package org.hibernate.test.annotations.naturalid;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.metadata.ClassMetadata;
+import org.hibernate.stat.Statistics;
+import org.hibernate.test.annotations.TestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test case for NaturalId annotation. See ANN-750.
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+@SuppressWarnings("unchecked")
+public class NaturalIdOnSingleManyToOneTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(NaturalIdOnManyToOne.class);
+
+ public void testMappingProperties() {
+ log.warn("Commented out test");
+
+ ClassMetadata metaData = getSessions().getClassMetadata(
+ NaturalIdOnManyToOne.class);
+ assertTrue("Class should have a natural key", metaData
+ .hasNaturalIdentifier());
+ int[] propertiesIndex = metaData.getNaturalIdentifierProperties();
+ assertTrue("Wrong number of elements", propertiesIndex.length == 1);
+ }
+
+ public void testManyToOneNaturalIdCached() {
+ NaturalIdOnManyToOne singleManyToOne = new NaturalIdOnManyToOne();
+ Citizen c1 = new Citizen();
+ c1.setFirstname("Emmanuel");
+ c1.setLastname("Bernard");
+ c1.setSsn("1234");
+
+ State france = new State();
+ france.setName("Ile de France");
+ c1.setState(france);
+
+ singleManyToOne.setCitizen(c1);
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist(france);
+ s.persist(c1);
+ s.persist(singleManyToOne);
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Criteria criteria = s.createCriteria(NaturalIdOnManyToOne.class);
+ criteria.add(Restrictions.naturalId().set("citizen", c1));
+ criteria.setCacheable(true);
+
+ Statistics stats = getSessions().getStatistics();
+ stats.setStatisticsEnabled(true);
+ stats.clear();
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+
+ // first query
+ List results = criteria.list();
+ assertEquals(1, results.size());
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+ assertEquals("First query should be a miss", 1, stats
+ .getQueryCacheMissCount());
+ assertEquals("Query result should be added to cache", 1, stats
+ .getQueryCachePutCount());
+
+ // query a second time - result should be cached
+ results = criteria.list();
+ assertEquals("Cache hits should be empty", 1, stats
+ .getQueryCacheHitCount());
+
+ // cleanup
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] { Citizen.class, State.class,
+ NaturalIdOnManyToOne.class };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/NaturalIdTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,137 @@
+//$Id: NaturalIdTest.java 14786 2008-06-19 14:59:11Z hardy.ferentschik $
+package org.hibernate.test.annotations.naturalid;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.metadata.ClassMetadata;
+import org.hibernate.stat.Statistics;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Test case for NaturalId annotation
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+@SuppressWarnings("unchecked")
+public class NaturalIdTest extends TestCase {
+
+ public void testMappingProperties() {
+ ClassMetadata metaData = getSessions().getClassMetadata(
+ Citizen.class);
+ assertTrue("Class should have a natural key", metaData
+ .hasNaturalIdentifier());
+ int[] propertiesIndex = metaData.getNaturalIdentifierProperties();
+ assertTrue("Wrong number of elements", propertiesIndex.length == 2);
+ }
+
+ public void testNaturalIdCached() {
+ saveSomeCitizens();
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ State france = (State) s.load(State.class, new Integer(2));
+ Criteria criteria = s.createCriteria(Citizen.class);
+ criteria.add(Restrictions.naturalId().set("ssn",
"1234").set("state",
+ france));
+ criteria.setCacheable(true);
+
+ Statistics stats = getSessions().getStatistics();
+ stats.setStatisticsEnabled(true);
+ stats.clear();
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+
+ // first query
+ List results = criteria.list();
+ assertEquals(1, results.size());
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+ assertEquals("First query should be a miss", 1, stats
+ .getQueryCacheMissCount());
+ assertEquals("Query result should be added to cache", 1, stats
+ .getQueryCachePutCount());
+
+ // query a second time - result should be cached
+ results = criteria.list();
+ assertEquals("Cache hits should be empty", 1, stats
+ .getQueryCacheHitCount());
+
+ // cleanup
+ tx.rollback();
+ s.close();
+ }
+
+ public void testNaturalIdUncached() {
+
+ saveSomeCitizens();
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ State france = (State) s.load(State.class, new Integer(2));
+ Criteria criteria = s.createCriteria(Citizen.class);
+ criteria.add(Restrictions.naturalId().set("ssn",
"1234").set("state",
+ france));
+ criteria.setCacheable(false);
+
+ Statistics stats = getSessions().getStatistics();
+ stats.setStatisticsEnabled(true);
+ stats.clear();
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+
+ // first query
+ List results = criteria.list();
+ assertEquals(1, results.size());
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+ assertEquals("Query result should be added to cache", 0, stats
+ .getQueryCachePutCount());
+
+ // query a second time
+ results = criteria.list();
+ assertEquals("Cache hits should be empty", 0, stats
+ .getQueryCacheHitCount());
+
+ // cleanup
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] { Citizen.class, State.class,
+ NaturalIdOnManyToOne.class };
+ }
+
+ private void saveSomeCitizens() {
+ Citizen c1 = new Citizen();
+ c1.setFirstname("Emmanuel");
+ c1.setLastname("Bernard");
+ c1.setSsn("1234");
+
+ State france = new State();
+ france.setName("Ile de France");
+ c1.setState(france);
+
+ Citizen c2 = new Citizen();
+ c2.setFirstname("Gavin");
+ c2.setLastname("King");
+ c2.setSsn("000");
+ State australia = new State();
+ australia.setName("Australia");
+ c2.setState(australia);
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist(australia);
+ s.persist(france);
+ s.persist(c1);
+ s.persist(c2);
+ tx.commit();
+ s.close();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/State.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/State.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/naturalid/State.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: State.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.naturalid;
+
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class State {
+ @Id
+ @GeneratedValue
+ private Integer id;
+ private String name;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Coin.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Coin.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Coin.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: Coin.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.notfound;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Coin {
+ private Integer id;
+ private String name;
+ private Currency currency;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "currency", referencedColumnName = "name")
+ @NotFound(action = NotFoundAction.IGNORE)
+ public Currency getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(Currency currency) {
+ this.currency = currency;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Currency.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Currency.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/Currency.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: Currency.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.notfound;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Currency implements Serializable {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+//$Id: NotFoundTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.notfound;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class NotFoundTest extends TestCase {
+
+ public void testManyToOne() throws Exception {
+ Currency euro = new Currency();
+ euro.setName( "Euro" );
+ Coin fiveC = new Coin();
+ fiveC.setName( "Five cents" );
+ fiveC.setCurrency( euro );
+ Session s = openSession();
+ s.getTransaction().begin();
+ s.persist( euro );
+ s.persist( fiveC );
+ s.getTransaction().commit();
+ s.clear();
+ Transaction tx = s.beginTransaction();
+ euro = (Currency) s.get( Currency.class, euro.getId() );
+ s.delete( euro );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ fiveC = (Coin) s.get( Coin.class, fiveC.getId() );
+ assertNull( fiveC.getCurrency() );
+ s.delete( fiveC );
+ tx.commit();
+ s.close();
+
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Coin.class,
+ Currency.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Child.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Child.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Child.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Child.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Child implements Serializable {
+ @Id
+ @GeneratedValue
+ public Integer id;
+
+ @ManyToOne()
+ @JoinColumns({
+ @JoinColumn(name = "parentCivility", referencedColumnName =
"isMale"),
+ @JoinColumn(name = "parentLastName", referencedColumnName =
"lastName"),
+ @JoinColumn(name = "parentFirstName", referencedColumnName =
"firstName")
+ })
+ public Parent parent;
+ @Column(name = "fav_sup_hero")
+ public String favoriteSuperhero;
+ @Column(name = "fav_singer")
+ public String favoriteSinger;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/City.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/City.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/City.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,72 @@
+//$Id: City.java 15046 2008-08-13 14:59:47Z epbernard $
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.annotations.Immutable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+class City {
+ private Integer id;
+ private String name;
+ private List<Street> streets;
+ private List<Street> mainStreets;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "city")
+ @OrderBy("streetNameCopy, id")
+ public synchronized List<Street> getStreets() {
+ return streets;
+ }
+
+ public void setStreets(List<Street> streets) {
+ this.streets = streets;
+ }
+
+ @OneToMany()
+ @JoinColumn(name = "mainstreetcity_id")
+ @ForeignKey(name = "CITYSTR_FK")
+ @OrderBy
+ @Immutable
+ public List<Street> getMainStreets() {
+ return mainStreets;
+ }
+
+ public void setMainStreets(List<Street> streets) {
+ this.mainStreets = streets;
+ }
+
+ public void addMainStreet(Street street) {
+ if ( mainStreets == null ) mainStreets = new ArrayList<Street>();
+ mainStreets.add( street );
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Monkey.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Monkey.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Monkey.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Monkey.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Monkey {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OneToManyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OneToManyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OneToManyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,432 @@
+//$Id: OneToManyTest.java 16346 2009-04-15 19:14:22Z gbadner $
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.dialect.HSQLDialect;
+import org.hibernate.test.annotations.Customer;
+import org.hibernate.test.annotations.Discount;
+import org.hibernate.test.annotations.Passport;
+import org.hibernate.test.annotations.RequiresDialect;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.Ticket;
+import org.hibernate.test.annotations.TicketComparator;
+
+/**
+ * Test various case of a one to many relationship
+ *
+ * @author Emmanuel Bernard
+ */
+@SuppressWarnings("unchecked")
+public class OneToManyTest extends TestCase {
+
+ public OneToManyTest(String x) {
+ super( x );
+ }
+
+ public void testColumnDefinitionPropagation() throws Exception {
+ Session s;
+ s = openSession();
+ s.getTransaction().begin();
+ Politician casimir = new Politician();
+ casimir.setName( "Casimir" );
+ PoliticalParty dream = new PoliticalParty();
+ dream.setName( "Dream" );
+ dream.addPolitician( casimir );
+ s.persist( dream );
+ s.getTransaction().commit();
+ s.clear();
+
+ Transaction tx = s.beginTransaction();
+ s.delete( s.get( PoliticalParty.class, dream.getName() ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testListWithBagSemanticAndOrderBy() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ City paris = new City();
+ paris.setName( "Paris" );
+ s.persist( paris );
+ Street rochechoir = new Street();
+ rochechoir.setStreetName( "Rochechoir" );
+ rochechoir.setCity( paris );
+ Street chmpsElysees = new Street();
+ chmpsElysees.setStreetName( "Champs Elysees" );
+ chmpsElysees.setCity( paris );
+ Street grandeArmee = new Street();
+ grandeArmee.setStreetName( "Grande Armee" );
+ grandeArmee.setCity( paris );
+ s.persist( rochechoir );
+ s.persist( chmpsElysees );
+ s.persist( grandeArmee );
+ paris.addMainStreet( chmpsElysees );
+ paris.addMainStreet( grandeArmee );
+
+ s.flush();
+ s.clear();
+
+ //testing @OrderBy with explicit values including Formula
+ paris = (City) s.get( City.class, paris.getId() );
+ assertEquals( 3, paris.getStreets().size() );
+ assertEquals( chmpsElysees.getStreetName(), paris.getStreets().get( 0 ).getStreetName()
);
+ List<Street> mainStreets = paris.getMainStreets();
+ assertEquals( 2, mainStreets.size() );
+ Integer previousId = new Integer( -1 );
+ for ( Street street : mainStreets ) {
+ assertTrue( previousId < street.getId() );
+ previousId = street.getId();
+ }
+ tx.rollback();
+ s.close();
+
+ }
+
+ public void testUnidirectionalDefault() throws Exception {
+ Session s;
+ Transaction tx;
+ Trainer trainer = new Trainer();
+ trainer.setName( "First trainer" );
+ Tiger regularTiger = new Tiger();
+ regularTiger.setName( "Regular Tiger" );
+ Tiger whiteTiger = new Tiger();
+ whiteTiger.setName( "White Tiger" );
+ trainer.setTrainedTigers( new HashSet<Tiger>() );
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( trainer );
+ s.persist( regularTiger );
+ s.persist( whiteTiger );
+ trainer.getTrainedTigers().add( regularTiger );
+ trainer.getTrainedTigers().add( whiteTiger );
+
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ trainer = (Trainer) s.get( Trainer.class, trainer.getId() );
+ assertNotNull( trainer );
+ assertNotNull( trainer.getTrainedTigers() );
+ assertEquals( 2, trainer.getTrainedTigers().size() );
+ tx.rollback();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ trainer = new Trainer();
+ trainer.setName( "new trainer" );
+ trainer.setTrainedTigers( new HashSet<Tiger>() );
+ trainer.getTrainedTigers().add( whiteTiger );
+ try {
+ s.persist( trainer );
+ tx.commit();
+ fail( "A one to many should not allow several trainer per Tiger" );
+ }
+ catch (HibernateException ce) {
+ tx.rollback();
+ //success
+ }
+ s.close();
+ }
+
+ public void testUnidirectionalExplicit() throws Exception {
+ Session s;
+ Transaction tx;
+ Trainer trainer = new Trainer();
+ trainer.setName( "First trainer" );
+ Monkey regularMonkey = new Monkey();
+ regularMonkey.setName( "Regular Monkey" );
+ Monkey miniMonkey = new Monkey();
+ miniMonkey.setName( "Mini Monkey" );
+ trainer.setTrainedMonkeys( new HashSet<Monkey>() );
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( trainer );
+ s.persist( regularMonkey );
+ s.persist( miniMonkey );
+ trainer.getTrainedMonkeys().add( regularMonkey );
+ trainer.getTrainedMonkeys().add( miniMonkey );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ trainer = (Trainer) s.get( Trainer.class, trainer.getId() );
+ assertNotNull( trainer );
+ assertNotNull( trainer.getTrainedMonkeys() );
+ assertEquals( 2, trainer.getTrainedMonkeys().size() );
+ tx.rollback();
+ s.close();
+ }
+
+ public void testFetching() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Troop t = new Troop();
+ t.setName( "Final cut" );
+ Soldier vandamme = new Soldier();
+ vandamme.setName( "JC Vandamme" );
+ t.addSoldier( vandamme );
+ Soldier rambo = new Soldier();
+ rambo.setName( "Rambo" );
+ t.addSoldier( rambo );
+ s.persist( t );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ t = (Troop) s.get( Troop.class, t.getId() );
+ assertNotNull( t.getSoldiers() );
+ assertFalse( Hibernate.isInitialized( t.getSoldiers() ) );
+ assertEquals( 2, t.getSoldiers().size() );
+ assertEquals( rambo.getName(), t.getSoldiers().iterator().next().getName() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ t = (Troop) s.createQuery( "from " + Troop.class.getName() + " as t
where t.id = :id" )
+ .setParameter( "id", t.getId() ).uniqueResult();
+ assertFalse( Hibernate.isInitialized( t.getSoldiers() ) );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ rambo = (Soldier) s.get( Soldier.class, rambo.getId() );
+ assertTrue( Hibernate.isInitialized( rambo.getTroop() ) );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ rambo = (Soldier) s.createQuery( "from " + Soldier.class.getName() + "
as s where s.id = :rid" )
+ .setParameter( "rid", rambo.getId() ).uniqueResult();
+ assertTrue( "fetching strategy used when we do query",
Hibernate.isInitialized( rambo.getTroop() ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCascadeDeleteOrphan() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Troop disney = new Troop();
+ disney.setName( "Disney" );
+ Soldier mickey = new Soldier();
+ mickey.setName( "Mickey" );
+ disney.addSoldier( mickey );
+ s.persist( disney );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Troop troop = (Troop) s.get( Troop.class, disney.getId() );
+ Soldier soldier = (Soldier) troop.getSoldiers().iterator().next();
+ tx.commit();
+ s.close();
+ //troop.getSoldiers().remove(soldier);
+ troop.getSoldiers().clear();
+ s = openSession();
+ tx = s.beginTransaction();
+ s.merge( troop );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ soldier = (Soldier) s.get( Soldier.class, mickey.getId() );
+ assertNull( "delete-orphan should work", soldier );
+ troop = (Troop) s.get( Troop.class, disney.getId() );
+ s.delete( troop );
+ tx.commit();
+ s.close();
+ }
+
+ public void testCascadeDelete() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Troop disney = new Troop();
+ disney.setName( "Disney" );
+ Soldier mickey = new Soldier();
+ mickey.setName( "Mickey" );
+ disney.addSoldier( mickey );
+ s.persist( disney );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Troop troop = (Troop) s.get( Troop.class, disney.getId() );
+ s.delete( troop );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Soldier soldier = (Soldier) s.get( Soldier.class, mickey.getId() );
+ assertNull( "delete-orphan should work", soldier );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSimpleOneToManySet() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Ticket t = new Ticket();
+ t.setNumber( "33A" );
+ Ticket t2 = new Ticket();
+ t2.setNumber( "234ER" );
+ Customer c = new Customer();
+ s.persist( c );
+ //s.persist(t);
+ SortedSet<Ticket> tickets = new TreeSet<Ticket>( new TicketComparator() );
+ tickets.add( t );
+ tickets.add( t2 );
+ c.setTickets( tickets );
+
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ c = (Customer) s.load( Customer.class, c.getId() );
+ assertNotNull( c );
+ assertTrue( Hibernate.isInitialized( c.getTickets() ) );
+ assertNotNull( c.getTickets() );
+ tickets = c.getTickets();
+ assertTrue( tickets.size() > 0 );
+ assertEquals( t2.getNumber(), c.getTickets().first().getNumber() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSimpleOneToManyCollection() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Discount d = new Discount();
+ d.setDiscount( 10 );
+ Customer c = new Customer();
+ List discounts = new ArrayList();
+ discounts.add( d );
+ d.setOwner( c );
+ c.setDiscountTickets( discounts );
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ c = (Customer) s.load( Customer.class, c.getId() );
+ assertNotNull( c );
+ assertFalse( Hibernate.isInitialized( c.getDiscountTickets() ) );
+ assertNotNull( c.getDiscountTickets() );
+ Collection collecDiscount = c.getDiscountTickets();
+ assertTrue( collecDiscount.size() > 0 );
+ tx.commit();
+ s.close();
+ }
+
+ public void testJoinColumns() throws Exception {
+ Parent parent = new Parent();
+ ParentPk pk = new ParentPk();
+ pk.firstName = "Bruce";
+ pk.lastName = "Willis";
+ pk.isMale = true;
+ parent.id = pk;
+ parent.age = 40;
+ Child child = new Child();
+ Child child2 = new Child();
+ parent.addChild( child );
+ parent.addChild( child2 );
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( parent );
+ tx.commit();
+ s.close();
+
+ assertNotNull( child.id );
+ assertNotNull( child2.id );
+ assertNotSame( child.id, child2.id );
+
+ s = openSession();
+ tx = s.beginTransaction();
+ parent = (Parent) s.get( Parent.class, pk );
+ assertNotNull( parent.children );
+ Hibernate.initialize( parent.children );
+ assertEquals( 2, parent.children.size() );
+ tx.commit();
+ s.close();
+ }
+
+ @RequiresDialect(HSQLDialect.class)
+ public void testOrderByOnSuperclassProperty() {
+ OrganisationUser user = new OrganisationUser();
+ user.setFirstName( "Emmanuel" );
+ user.setLastName( "Bernard" );
+ user.setIdPerson( new Long(1) );
+ user.setSomeText( "SomeText" );
+ Organisation org = new Organisation();
+ org.setIdOrganisation( new Long(1) );
+ org.setName( "S Diego Zoo" );
+ user.setOrganisation( org );
+ Session s = openSession();
+ s.getTransaction().begin();
+ s.persist( user );
+ s.persist( org );
+ s.flush();
+ s.clear();
+ s.createQuery( "select org from Organisation org left join fetch
org.organisationUsers" ).list();
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Troop.class,
+ Soldier.class,
+ Customer.class,
+ Ticket.class,
+ Discount.class,
+ Passport.class,
+ Parent.class,
+ Child.class,
+ Trainer.class,
+ Tiger.class,
+ Monkey.class,
+ City.class,
+ Street.class,
+ PoliticalParty.class,
+ Politician.class,
+ Person.class,
+ Organisation.class,
+ OrganisationUser.class
+ };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Order.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Order.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Order.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,70 @@
+//$Id: Order.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+@Entity
+@Table( name = "Order_tbl" )
+@IdClass( OrderID.class )
+public class Order {
+ private String schoolId;
+ private Integer schoolIdSort;
+ private Integer academicYear;
+
+ private List<OrderItem> itemList = new ArrayList<OrderItem>();
+
+ public boolean equals(Object obj) {
+ return super.equals( obj );
+ }
+
+ public int hashCode() {
+ return 10;
+ }
+
+ @Id
+ public Integer getAcademicYear() {
+ return this.academicYear;
+ }
+
+ protected void setAcademicYear(Integer academicYear) {
+ this.academicYear = academicYear;
+ }
+
+ @Id
+ public String getSchoolId() {
+ return this.schoolId;
+ }
+
+ protected void setSchoolId(String schoolId) {
+ this.schoolId = schoolId;
+ }
+
+ @OneToMany( mappedBy = "order" )
+ @OrderBy( "dayNo desc" )
+ public List<OrderItem> getItemList() {
+ return this.itemList;
+ }
+
+ public void setItemList(List<OrderItem> itemList) {
+ this.itemList = itemList;
+ }
+
+ public Integer getSchoolIdSort() {
+ return this.schoolIdSort;
+ }
+
+ public void setSchoolIdSort(Integer schoolIdSort) {
+ this.schoolIdSort = schoolIdSort;
+ }
+
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderByTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderByTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderByTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: OrderByTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderByTest extends TestCase {
+ public void testOrderByOnIdClassProperties() throws Exception {
+ Session s = openSession( );
+ s.getTransaction().begin();
+ Order o = new Order();
+ o.setAcademicYear( 2000 );
+ o.setSchoolId( "Supelec" );
+ o.setSchoolIdSort( 1 );
+ s.persist( o );
+ OrderItem oi1 = new OrderItem();
+ oi1.setAcademicYear( 2000 );
+ oi1.setDayName( "Monday" );
+ oi1.setSchoolId( "Supelec" );
+ oi1.setOrder( o );
+ oi1.setDayNo( 23 );
+ s.persist( oi1 );
+ OrderItem oi2 = new OrderItem();
+ oi2.setAcademicYear( 2000 );
+ oi2.setDayName( "Tuesday" );
+ oi2.setSchoolId( "Supelec" );
+ oi2.setOrder( o );
+ oi2.setDayNo( 30 );
+ s.persist( oi2 );
+ s.flush();
+ s.clear();
+
+ OrderID oid = new OrderID();
+ oid.setAcademicYear( 2000 );
+ oid.setSchoolId( "Supelec" );
+ o = (Order) s.get( Order.class, oid );
+ assertEquals( 30, o.getItemList().get( 0 ).getDayNo().intValue() );
+
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Order.class,
+ OrderItem.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderID.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderID.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderID.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: OrderID.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderID implements Serializable {
+ private String schoolId;
+ private Integer academicYear;
+
+ @Column( name = "Academic_Yr" )
+ public Integer getAcademicYear() {
+ return this.academicYear;
+ }
+
+ public void setAcademicYear(Integer academicYear) {
+ this.academicYear = academicYear;
+ }
+
+ @Column( name = "School_Id" )
+ public String getSchoolId() {
+ return this.schoolId;
+ }
+
+ public void setSchoolId(String schoolId) {
+ this.schoolId = schoolId;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItem.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItem.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItem.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: OrderItem.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table( name = "OrderItem_tbl" )
+@IdClass( OrderItemID.class )
+public class OrderItem {
+ String schoolId;
+ Integer academicYear;
+ Integer dayNo;
+ String dayName;
+ private Order order;
+
+ @Id
+ public Integer getDayNo() {
+ return dayNo;
+ }
+
+ public void setDayNo(Integer dayNo) {
+ this.dayNo = dayNo;
+ }
+
+ @Id
+ public String getSchoolId() {
+ return schoolId;
+ }
+
+ public void setSchoolId(String schoolId) {
+ this.schoolId = schoolId;
+ }
+
+ @Id
+ public Integer getAcademicYear() {
+ return academicYear;
+ }
+
+ public void setAcademicYear(Integer academicYear) {
+ this.academicYear = academicYear;
+ }
+
+ @Column( name = "Day_Name" )
+ public String getDayName() {
+ return dayName;
+ }
+
+ public void setDayName(String dayName) {
+ this.dayName = dayName;
+ }
+
+ @ManyToOne( fetch = FetchType.LAZY )
+ @JoinColumns( {
+ @JoinColumn( name = "School_Id", referencedColumnName = "School_Id",
insertable = false, updatable = false ),
+ @JoinColumn( name = "Academic_Yr", referencedColumnName =
"Academic_Yr", insertable = false, updatable = false )
+ } )
+ public Order getOrder() {
+ return this.order;
+ }
+
+ public void setOrder(Order order) {
+ this.order = order;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItemID.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItemID.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrderItemID.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,41 @@
+//$Id: OrderItemID.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderItemID implements Serializable {
+ String schoolId;
+ Integer academicYear;
+ Integer dayNo;
+
+ @Column( name = "Academic_Yr" )
+ public Integer getAcademicYear() {
+ return this.academicYear;
+ }
+
+ public void setAcademicYear(Integer academicYear) {
+ this.academicYear = academicYear;
+ }
+
+ @Column( name = "Day_No" )
+ public Integer getDayNo() {
+ return this.dayNo;
+ }
+
+ public void setDayNo(Integer dayNo) {
+ this.dayNo = dayNo;
+ }
+
+ @Column( name = "School_Id" )
+ public String getSchoolId() {
+ return this.schoolId;
+ }
+
+ public void setSchoolId(String schoolId) {
+ this.schoolId = schoolId;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Organisation.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Organisation.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Organisation.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,60 @@
+//$Id: Organisation.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table( name = "ORGANISATION" )
+public class Organisation implements Serializable {
+
+ private Long idOrganisation;
+ private String name;
+ private Set<OrganisationUser> organisationUsers;
+
+ public Organisation() {
+ }
+
+ public void setIdOrganisation(Long idOrganisation) {
+ this.idOrganisation = idOrganisation;
+ }
+
+ @Id
+ @Column( name = "id_organisation", nullable = false )
+ public Long getIdOrganisation() {
+ return idOrganisation;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Column( name = "name", nullable = false, length = 40 )
+ public String getName() {
+ return name;
+ }
+
+ public void setOrganisationUsers(Set<OrganisationUser> organisationUsers) {
+ this.organisationUsers = organisationUsers;
+ }
+
+ @OneToMany( mappedBy = "organisation",
+ fetch = FetchType.LAZY,
+ cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+ @OrderBy( value = "firstName" )
+ public Set<OrganisationUser> getOrganisationUsers() {
+ return organisationUsers;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrganisationUser.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrganisationUser.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/OrganisationUser.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$Id: OrganisationUser.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@PrimaryKeyJoinColumn( name = "id_organisation_user" )
+@Table( name = "ORGANISATION_USER" )
+public class OrganisationUser extends Person implements Serializable {
+
+ private String someText;
+ private Organisation organisation;
+
+ public OrganisationUser() {
+ }
+
+ public void setSomeText(String someText) {
+ this.someText = someText;
+ }
+
+ @Column( name = "some_text", nullable=true,length=1024)
+ public String getSomeText() {
+ return someText;
+ }
+
+ public void setOrganisation(Organisation organisation) {
+ this.organisation = organisation;
+ }
+
+ @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+ @JoinColumn( name = "fk_id_organisation", nullable = false )
+ public Organisation getOrganisation() {
+ return organisation;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Parent.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Parent.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Parent.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: Parent.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.BatchSize;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Parent implements Serializable {
+ @Id
+ public ParentPk id;
+ public int age;
+
+ @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
+ @BatchSize(size = 5)
+ @javax.persistence.OrderBy("favoriteSuperhero asc, favoriteSinger desc")
+ public Set<Child> children;
+
+ public int hashCode() {
+ //a NPE can occurs, but I don't expect hashcode to be used before pk is set
+ return id.hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ //a NPE can occurs, but I don't expect equals to be used before pk is set
+ if ( obj != null && obj instanceof Parent ) {
+ return id.equals( ( (Parent) obj ).id );
+ }
+ else {
+ return false;
+ }
+ }
+
+ public void addChild(Child child) {
+ if ( children == null ) {
+ children = new HashSet();
+ }
+ child.parent = this;
+ children.add( child );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/ParentPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/ParentPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/ParentPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,38 @@
+//$Id: ParentPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class ParentPk implements Serializable {
+ String firstName;
+ String lastName;
+
+ /**
+ * is a male or a female
+ */
+ //show hetereogenous PK types
+ boolean isMale;
+
+ public int hashCode() {
+ //this implem sucks
+ return firstName.hashCode() + lastName.hashCode() + ( isMale ? 0 : 1 );
+ }
+
+ public boolean equals(Object obj) {
+ //firstName and lastName are expected to be set in this implem
+ if ( obj != null && obj instanceof ParentPk ) {
+ ParentPk other = (ParentPk) obj;
+ return firstName.equals( other.firstName )
+ && lastName.equals( other.lastName )
+ && isMale == other.isMale;
+ }
+ else {
+ return false;
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Person.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Person.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Person.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,55 @@
+//$Id: Person.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.InheritanceType;
+import javax.persistence.Inheritance;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance( strategy = InheritanceType.JOINED )
+@Table( name = "PERSON_Orderby" )
+public class Person implements Serializable {
+
+ private Long idPerson;
+ private String firstName, lastName;
+
+ public Person() {
+ }
+
+ public void setIdPerson(Long idPerson) {
+ this.idPerson = idPerson;
+ }
+
+ @Id
+ @Column( name = "id_person", nullable = false )
+ public Long getIdPerson() {
+ return idPerson;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ @Column( name = "first_name", length = 40, nullable = false )
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ @Column( name = "last_name", length = 40, nullable = false )
+ public String getLastName() {
+ return lastName;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/PoliticalParty.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/PoliticalParty.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/PoliticalParty.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,43 @@
+//$Id: PoliticalParty.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PoliticalParty {
+ private String name;
+ private Set<Politician> politicians = new HashSet<Politician>();
+
+ @Id
+ @Column(columnDefinition = "VARCHAR(60)")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "party", cascade = CascadeType.ALL)
+ public Set<Politician> getPoliticians() {
+ return politicians;
+ }
+
+ public void setPoliticians(Set<Politician> politicians) {
+ this.politicians = politicians;
+ }
+
+ public void addPolitician(Politician politician) {
+ politicians.add( politician );
+ politician.setParty( this );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Politician.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Politician.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Politician.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: Politician.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Politician {
+ private String name;
+ private PoliticalParty party;
+
+ @Id
+ @Column(columnDefinition = "VARCHAR(30)")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "party_fk")
+ public PoliticalParty getParty() {
+ return party;
+ }
+
+ public void setParty(PoliticalParty party) {
+ this.party = party;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Soldier.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Soldier.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Soldier.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: Soldier.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Soldier {
+ private Integer id;
+ private String name;
+ private Troop troop;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne(fetch = FetchType.EAGER)
+ @JoinColumn(name = "troop_fk")
+ public Troop getTroop() {
+ return troop;
+ }
+
+ public void setTroop(Troop troop) {
+ this.troop = troop;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Soldier ) ) return false;
+
+ final Soldier soldier = (Soldier) o;
+
+ if ( !name.equals( soldier.name ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Street.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Street.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Street.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,58 @@
+//$Id: Street.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Street {
+ private Integer id;
+ private String streetName;
+ private String streetNameCopy;
+ private City city;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(name="STREET_NAME")
+ public String getStreetName() {
+ return streetName;
+ }
+
+ public void setStreetName(String streetName) {
+ this.streetName = streetName;
+ }
+
+ @Formula("STREET_NAME")
+ public String getStreetNameCopy() {
+ return streetNameCopy;
+ }
+
+ public void setStreetNameCopy(String streetNameCopy) {
+ this.streetNameCopy = streetNameCopy;
+ }
+
+ @ManyToOne
+ public City getCity() {
+ return city;
+ }
+
+ public void setCity(City city) {
+ this.city = city;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Tiger.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Tiger.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Tiger.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Tiger.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Tiger {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Trainer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Trainer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Trainer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,67 @@
+//$Id: Trainer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * Unidirectional one to many sample
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity()
+public class Trainer {
+ private Integer id;
+ private String name;
+ private Set<Tiger> trainedTigers;
+ private Set<Monkey> trainedMonkeys;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany
+ public Set<Tiger> getTrainedTigers() {
+ return trainedTigers;
+ }
+
+ public void setTrainedTigers(Set<Tiger> trainedTigers) {
+ this.trainedTigers = trainedTigers;
+ }
+
+ @OneToMany
+ @JoinTable(
+ name = "TrainedMonkeys",
+ joinColumns = {@JoinColumn(name = "trainer_id")},
+ inverseJoinColumns = @JoinColumn(name = "monkey_id")
+ )
+ @ForeignKey(name = "TM_TRA_FK", inverseName = "TM_MON_FK")
+ public Set<Monkey> getTrainedMonkeys() {
+ return trainedMonkeys;
+ }
+
+ public void setTrainedMonkeys(Set<Monkey> trainedMonkeys) {
+ this.trainedMonkeys = trainedMonkeys;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Troop.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Troop.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetomany/Troop.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,64 @@
+//$Id: Troop.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+import org.hibernate.annotations.OrderBy;
+
+/**
+ * Shows a default one to many
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Troop {
+ private Integer id;
+ private String name;
+ private Set<Soldier> soldiers;
+
+ @OneToMany(mappedBy = "troop", cascade = {CascadeType.ALL}, fetch =
FetchType.LAZY)
+ @OrderBy(clause = "name desc")
+ @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
+ @OnDelete(action = OnDeleteAction.CASCADE)
+ public Set<Soldier> getSoldiers() {
+ return soldiers;
+ }
+
+ public void setSoldiers(Set<Soldier> soldiers) {
+ this.soldiers = soldiers;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void addSoldier(Soldier s) {
+ if ( soldiers == null ) soldiers = new HashSet<Soldier>();
+ soldiers.add( s );
+ s.setTroop( this );
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Address.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Address.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Address.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: Address.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Address {
+
+ private Integer id;
+ private String city;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Body.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Body.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Body.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Body.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Body {
+ private Integer id;
+ private Heart heart;
+
+ @OneToOne
+ @PrimaryKeyJoinColumn
+ public Heart getHeart() {
+ return heart;
+ }
+
+ public void setHeart(Heart heart) {
+ this.heart = heart;
+ }
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Client.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Client.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Client.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: Client.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Client {
+
+ private Integer id;
+ private String name;
+ private Address address;
+
+ @OneToOne(cascade = CascadeType.ALL)
+ @JoinColumn(name = "ADDRESS_ID")
+ public Address getAddress() {
+ return address;
+ }
+
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Computer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Computer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Computer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: Computer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Computer {
+
+ private ComputerPk id;
+ private String cpu;
+ private SerialNumber serial;
+
+ @OneToOne(cascade = {CascadeType.PERSIST})
+ @JoinColumns({
+ @JoinColumn(name = "serialbrand", referencedColumnName = "brand"),
+ @JoinColumn(name = "serialmodel", referencedColumnName = "model")
+ })
+ public SerialNumber getSerial() {
+ return serial;
+ }
+
+ public void setSerial(SerialNumber serial) {
+ this.serial = serial;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Computer ) ) return false;
+
+ final Computer computer = (Computer) o;
+
+ if ( !id.equals( computer.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+
+ @EmbeddedId
+ @AttributeOverrides({
+ @AttributeOverride(name = "brand", column = @Column(name =
"computer_brand")),
+ @AttributeOverride(name = "model", column = @Column(name =
"computer_model"))
+ })
+ public ComputerPk getId() {
+ return id;
+ }
+
+ public void setId(ComputerPk id) {
+ this.id = id;
+ }
+
+ public String getCpu() {
+ return cpu;
+ }
+
+ public void setCpu(String cpu) {
+ this.cpu = cpu;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ComputerPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ComputerPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ComputerPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: ComputerPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class ComputerPk implements Serializable {
+ private String brand;
+ private String model;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof ComputerPk ) ) return false;
+
+ final ComputerPk computerPk = (ComputerPk) o;
+
+ if ( !brand.equals( computerPk.brand ) ) return false;
+ if ( !model.equals( computerPk.model ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = brand.hashCode();
+ result = 29 * result + model.hashCode();
+ return result;
+ }
+
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Heart.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Heart.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Heart.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Heart.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Heart {
+ private Integer id;
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneErrorTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneErrorTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneErrorTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: OneToOneErrorTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.test.annotations.IncorrectEntity;
+import org.hibernate.SessionFactory;
+import org.hibernate.AnnotationException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OneToOneErrorTest extends junit.framework.TestCase {
+ public void testWrongOneToOne() throws Exception {
+ AnnotationConfiguration cfg = new AnnotationConfiguration();
+ cfg.addAnnotatedClass( Show.class )
+ .addAnnotatedClass( ShowDescription.class );
+ cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+ try {
+ SessionFactory sf = cfg.buildSessionFactory();
+ fail( "Wrong mappedBy does not fail property" );
+ }
+ catch (AnnotationException e) {
+ //success
+ }
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OneToOneTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,268 @@
+//$Id: OneToOneTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Customer;
+import org.hibernate.test.annotations.Discount;
+import org.hibernate.test.annotations.Passport;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.Ticket;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OneToOneTest extends TestCase {
+
+ public OneToOneTest(String x) {
+ super( x );
+ }
+
+ public void testEagerFetching() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Client c = new Client();
+ c.setName( "Emmanuel" );
+ Address a = new Address();
+ a.setCity( "Courbevoie" );
+ c.setAddress( a );
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "select c from Client c where c.name = :name" );
+ q.setString( "name", c.getName() );
+ c = (Client) q.uniqueResult();
+ //c = (Client) s.get(Client.class, c.getId());
+ assertNotNull( c );
+ tx.commit();
+ s.close();
+ assertNotNull( c.getAddress() );
+ //assertTrue( "Should be eager fetched", Hibernate.isInitialized(
c.getAddress() ) );
+
+ }
+
+ public void testDefaultOneToOne() throws Exception {
+ //test a default one to one and a mappedBy in the other side
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Customer c = new Customer();
+ c.setName( "Hibernatus" );
+ Passport p = new Passport();
+ p.setNumber( "123456789" );
+ s.persist( c ); //we need the id to assigned it to passport
+ c.setPassport( p );
+ p.setOwner( c );
+ p.setId( c.getId() );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ c = (Customer) s.get( Customer.class, c.getId() );
+ assertNotNull( c );
+ p = c.getPassport();
+ assertNotNull( p );
+ assertEquals( "123456789", p.getNumber() );
+ assertNotNull( p.getOwner() );
+ assertEquals( "Hibernatus", p.getOwner().getName() );
+ tx.commit(); // commit or rollback is the same, we don't care for read queries
+ s.close();
+ }
+
+ public void testOneToOneWithExplicitFk() throws Exception {
+ Client c = new Client();
+ Address a = new Address();
+ a.setCity( "Paris" );
+ c.setName( "Emmanuel" );
+ c.setAddress( a );
+
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ c = (Client) s.get( Client.class, c.getId() );
+ assertNotNull( c );
+ assertNotNull( c.getAddress() );
+ assertEquals( "Paris", c.getAddress().getCity() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testUnidirectionalTrueOneToOne() throws Exception {
+ Body b = new Body();
+ Heart h = new Heart();
+ b.setHeart( h );
+ b.setId( new Integer( 1 ) );
+ h.setId( b.getId() ); //same PK
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ s.persist( h );
+ s.persist( b );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ b = (Body) s.get( Body.class, b.getId() );
+ assertNotNull( b );
+ assertNotNull( b.getHeart() );
+ assertEquals( h.getId(), b.getHeart().getId() );
+ tx.commit();
+ s.close();
+
+ }
+
+ public void testCompositePk() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ ComputerPk cid = new ComputerPk();
+ cid.setBrand( "IBM" );
+ cid.setModel( "ThinkPad" );
+ Computer c = new Computer();
+ c.setId( cid );
+ c.setCpu( "2 GHz" );
+ SerialNumberPk sid = new SerialNumberPk();
+ sid.setBrand( cid.getBrand() );
+ sid.setModel( cid.getModel() );
+ SerialNumber sn = new SerialNumber();
+ sn.setId( sid );
+ sn.setValue( "REZREZ23424" );
+ c.setSerial( sn );
+ s.persist( c );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ c = (Computer) s.get( Computer.class, cid );
+ assertNotNull( c );
+ assertNotNull( c.getSerial() );
+ assertEquals( sn.getValue(), c.getSerial().getValue() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testBidirectionalTrueOneToOne() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Party party = new Party();
+ PartyAffiliate affiliate = new PartyAffiliate();
+ affiliate.partyId = "id";
+ party.partyId = "id";
+ party.partyAffiliate = affiliate;
+ affiliate.party = party;
+ s.persist( party );
+ s.persist( affiliate );
+ s.getTransaction().commit();
+
+ s.clear();
+
+ Transaction tx = s.beginTransaction();
+ affiliate = (PartyAffiliate) s.get( PartyAffiliate.class, "id" );
+ assertNotNull( affiliate.party );
+ assertEquals( affiliate.partyId, affiliate.party.partyId );
+
+ s.clear();
+
+ party = (Party) s.get( Party.class, "id" );
+ assertNotNull( party.partyAffiliate );
+ assertEquals( party.partyId, party.partyAffiliate.partyId );
+
+ s.delete( party );
+ s.delete( party.partyAffiliate );
+ tx.commit();
+ s.close();
+ }
+
+ public void testBidirectionalFkOneToOne() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Trousers trousers = new Trousers();
+ TrousersZip zip = new TrousersZip();
+ trousers.id = new Integer( 1 );
+ zip.id = new Integer( 2 );
+ trousers.zip = zip;
+ zip.trousers = trousers;
+ s.persist( trousers );
+ s.persist( zip );
+ s.getTransaction().commit();
+
+ s.clear();
+
+ Transaction tx = s.beginTransaction();
+ trousers = (Trousers) s.get( Trousers.class, trousers.id );
+ assertNotNull( trousers.zip );
+ assertEquals( zip.id, trousers.zip.id );
+
+ s.clear();
+
+ zip = (TrousersZip) s.get( TrousersZip.class, zip.id );
+ assertNotNull( zip.trousers );
+ assertEquals( trousers.id, zip.trousers.id );
+
+ s.delete( zip );
+ s.delete( zip.trousers );
+ tx.commit();
+ s.close();
+ }
+
+ public void testForeignGenerator() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Owner owner = new Owner();
+ OwnerAddress address = new OwnerAddress();
+ owner.setAddress( address );
+ address.setOwner( owner );
+ s.persist( owner );
+ s.flush();
+ s.clear();
+ owner = (Owner) s.get( Owner.class, owner.getId() );
+ assertNotNull( owner );
+ assertNotNull( owner.getAddress() );
+ assertEquals( owner.getId(), owner.getAddress().getId() );
+ tx.rollback();
+ s.close();
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ PartyAffiliate.class,
+ Party.class,
+ Trousers.class,
+ TrousersZip.class,
+ Customer.class,
+ Ticket.class,
+ Discount.class,
+ Passport.class,
+ Client.class,
+ Address.class,
+ Computer.class,
+ SerialNumber.class,
+ Body.class,
+ Heart.class,
+ Owner.class,
+ OwnerAddress.class
+ };
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Owner.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Owner.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Owner.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Owner.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.CascadeType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Owner {
+ @Id @GeneratedValue private Integer id;
+
+ @OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn private OwnerAddress
address;
+
+ public OwnerAddress getAddress() {
+ return address;
+ }
+
+ public void setAddress(OwnerAddress address) {
+ this.address = address;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OwnerAddress.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OwnerAddress.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/OwnerAddress.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: OwnerAddress.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Parameter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class OwnerAddress {
+ @Id @GeneratedValue(generator = "fk")
+ @GenericGenerator(strategy = "foreign", name = "fk", parameters =
@Parameter(name="property", value="owner"))
+ private Integer id;
+
+ @OneToOne(mappedBy="address", optional = false)
+ private Owner owner;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Owner getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Owner owner) {
+ this.owner = owner;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Party.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Party.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Party.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: Party.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Party {
+ @Id
+ String partyId;
+
+ @OneToOne
+ @PrimaryKeyJoinColumn
+ PartyAffiliate partyAffiliate;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/PartyAffiliate.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: PartyAffiliate.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PartyAffiliate {
+ @Id
+ String partyId;
+
+ @OneToOne(mappedBy="partyAffiliate")
+ Party party;
+
+ String affiliateName;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumber.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumber.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumber.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,46 @@
+//$Id: SerialNumber.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class SerialNumber {
+ private SerialNumberPk id;
+ private String value;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof SerialNumber ) ) return false;
+
+ final SerialNumber serialNumber = (SerialNumber) o;
+
+ if ( !id.equals( serialNumber.id ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id.hashCode();
+ }
+
+ @Id
+ public SerialNumberPk getId() {
+ return id;
+ }
+
+ public void setId(SerialNumberPk id) {
+ this.id = id;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumberPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumberPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/SerialNumberPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,49 @@
+//$Id: SerialNumberPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class SerialNumberPk implements Serializable {
+ private String brand;
+ private String model;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof SerialNumberPk ) ) return false;
+
+ final SerialNumberPk serialNumberPk = (SerialNumberPk) o;
+
+ if ( !brand.equals( serialNumberPk.brand ) ) return false;
+ if ( !model.equals( serialNumberPk.model ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = brand.hashCode();
+ result = 13 * result + model.hashCode();
+ return result;
+ }
+
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Show.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Show.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Show.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: Show.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Show {
+ @Id
+ private Integer id;
+ @OneToOne() private ShowDescription description;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public ShowDescription getDescription() {
+ return description;
+ }
+
+ public void setDescription(ShowDescription description) {
+ this.description = description;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ShowDescription.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ShowDescription.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/ShowDescription.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: ShowDescription.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class ShowDescription {
+ @Id
+ private Integer id;
+ @OneToOne(mappedBy = "wrongProperty")
+ private Show show;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Show getShow() {
+ return show;
+ }
+
+ public void setShow(Show show) {
+ this.show = show;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Trousers.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Trousers.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/Trousers.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: Trousers.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Trousers {
+ @Id
+ public Integer id;
+
+ @OneToOne
+ @JoinColumn(name = "zip_id")
+ public TrousersZip zip;
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/TrousersZip.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/TrousersZip.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/TrousersZip.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$Id: TrousersZip.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class TrousersZip {
+ @Id
+ public Integer id;
+ @OneToOne(mappedBy = "zip")
+ public Trousers trousers;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Address.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Address.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Address.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: A320.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone.primarykey;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+@Entity
+public class Address {
+
+ @Id
+ private long id;
+
+ @OneToOne(mappedBy = "address")
+ private Person person;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Person getPerson() {
+ return person;
+ }
+
+ public void setPerson(Person person) {
+ this.person = person;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/NullablePrimaryKeyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/NullablePrimaryKeyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/NullablePrimaryKeyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: A320.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone.primarykey;
+
+import junit.framework.TestCase;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.dialect.SQLServerDialect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test harness for ANN-742.
+ *
+ * @author Hardy Ferentschik
+ *
+ */
+public class NullablePrimaryKeyTest extends TestCase {
+
+ private Logger log = LoggerFactory.getLogger(NullablePrimaryKeyTest.class);
+
+ public void testGeneratedSql() {
+ try {
+ AnnotationConfiguration config = new AnnotationConfiguration();
+ config.addAnnotatedClass(Address.class);
+ config.addAnnotatedClass(Person.class);
+ config.buildSessionFactory();
+ String[] schema = config
+ .generateSchemaCreationScript(new SQLServerDialect());
+ for (String s : schema) {
+ log.debug(s);
+ }
+ String expectedMappingTableSql = "create table personAddress (address_id
numeric(19,0) null, " +
+ "person_id numeric(19,0) not null, primary key (person_id))";
+ assertEquals("Wrong SQL", expectedMappingTableSql, schema[2]);
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Person.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Person.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/onetoone/primarykey/Person.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: A320.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.onetoone.primarykey;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.OneToOne;
+
+@Entity
+public class Person {
+
+ @Id
+ private long id;
+
+ @OneToOne
+ @JoinTable(
+ name = "personAddress",
+ joinColumns = @JoinColumn(name = "person_id"),
+ inverseJoinColumns = @JoinColumn(name = "address_id")
+ )
+ private Address address;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Address getAddress() {
+ return address;
+ }
+
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/orm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/orm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/orm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="1.0"
+ >
+ <sequence-generator name="SEQ_GEN"
sequence-name="my_sequence"/>
+ <table-generator name="EMP_GEN" table="GENERATOR_TABLE"
+ pk-column-name="pkey" pk-column-value="EMP"
+ value-column-name="hi"
allocation-size="20"/>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/AssociationOverrideTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/AssociationOverrideTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/AssociationOverrideTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: AssociationOverrideTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.override;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AssociationOverrideTest extends TestCase {
+
+ public void testOverriding() throws Exception {
+ Location paris = new Location();
+ paris.setName( "Paris" );
+ Location atlanta = new Location();
+ atlanta.setName( "Atlanta" );
+ Trip trip = new Trip();
+ trip.setFrom( paris );
+ //trip.setTo( atlanta );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( paris );
+ s.persist( atlanta );
+ try {
+ s.persist( trip );
+ s.flush();
+ fail( "Should be non nullable" );
+ }
+ catch (HibernateException e) {
+ //success
+ }
+ finally {
+ tx.rollback();
+ s.close();
+ }
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Location.class,
+ Move.class,
+ Trip.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Location.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Location.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Location.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Location.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.override;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Location {
+ private String name;
+
+ @Id
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Move.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Move.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Move.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: Move.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.override;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Move {
+ private int id;
+ private Location from;
+ private Location to;
+
+ @ManyToOne
+ public Location getFrom() {
+ return from;
+ }
+
+ public void setFrom(Location from) {
+ this.from = from;
+ }
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "to", nullable = true)
+ public Location getTo() {
+ return to;
+ }
+
+ public void setTo(Location to) {
+ this.to = to;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Trip.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Trip.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/override/Trip.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,18 @@
+//$Id: Trip.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.override;
+
+import javax.persistence.AssociationOverride;
+import javax.persistence.AssociationOverrides;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@AssociationOverrides({
+@AssociationOverride(name = "from", joinColumns = @JoinColumn(name =
"from2", nullable = false)),
+@AssociationOverride(name = "to", joinColumns = @JoinColumn(name =
"to2", nullable = false))
+ })
+public class Trip extends Move {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Card.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Card.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Card.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+package org.hibernate.test.annotations.persister;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Shawn Clowater
+ */
+@Entity
+(a)org.hibernate.annotations.Entity( persister =
"org.hibernate.persister.entity.SingleTableEntityPersister" )
+public class Card implements Serializable {
+ @Id
+ public Integer id;
+
+ @ManyToOne()
+ @JoinColumn()
+ public Deck deck;
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/CollectionPersister.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/CollectionPersister.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/CollectionPersister.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+package org.hibernate.test.annotations.persister;
+
+import org.hibernate.MappingException;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.access.CollectionRegionAccessStrategy;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.mapping.Collection;
+import org.hibernate.persister.collection.OneToManyPersister;
+
+/**
+ * @author Shawn Clowater
+ */
+public class CollectionPersister extends OneToManyPersister {
+ public CollectionPersister(Collection collection, CollectionRegionAccessStrategy cache,
Configuration cfg,
+ SessionFactoryImplementor factory) throws MappingException, CacheException {
+ super( collection, cache, cfg, factory );
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Deck.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Deck.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/Deck.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+package org.hibernate.test.annotations.persister;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Persister;
+
+
+/**
+ * @author Shawn Clowater
+ */
+@Entity
+(a)org.hibernate.annotations.Entity( persister =
"org.hibernate.persister.entity.SingleTableEntityPersister" )
+@Persister( impl = org.hibernate.test.annotations.persister.EntityPersister.class )
+public class Deck implements Serializable {
+ @Id
+ public Integer id;
+
+ @OneToMany( mappedBy = "deck" )
+ @Persister( impl = org.hibernate.test.annotations.persister.CollectionPersister.class )
+ public Set<Card> cards;
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/EntityPersister.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/EntityPersister.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/EntityPersister.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+package org.hibernate.test.annotations.persister;
+
+import org.hibernate.HibernateException;
+import org.hibernate.cache.CacheConcurrencyStrategy;
+import org.hibernate.cache.access.EntityRegionAccessStrategy;
+import org.hibernate.engine.Mapping;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.persister.entity.SingleTableEntityPersister;
+
+/**
+ * @author Shawn Clowater
+ */
+public class EntityPersister extends SingleTableEntityPersister {
+ public EntityPersister(PersistentClass persistentClass, EntityRegionAccessStrategy
cache,
+ SessionFactoryImplementor factory, Mapping cfg) throws HibernateException {
+ super( persistentClass, cache, factory, cfg );
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/PersisterTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/PersisterTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/persister/PersisterTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+package org.hibernate.test.annotations.persister;
+
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.persister.entity.SingleTableEntityPersister;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Shawn Clowater
+ */
+public class PersisterTest extends TestCase {
+ public PersisterTest(String x) {
+ super( x );
+ }
+
+ public void testEntityEntityPersisterAndPersisterSpecified() throws Exception {
+ //checks to see that the persister specified with the @Persister annotation takes
precedence if a @Entity.persister() is also specified
+ PersistentClass persistentClass = (PersistentClass) getCfg().getClassMapping(
Deck.class.getName() );
+ assertEquals( "Incorrect Persister class for " +
persistentClass.getMappedClass(), EntityPersister.class,
+ persistentClass.getEntityPersisterClass() );
+ }
+
+ public void testEntityEntityPersisterSpecified() throws Exception {
+ //tests the persister specified with an @Entity.persister()
+ PersistentClass persistentClass = (PersistentClass) getCfg().getClassMapping(
Card.class.getName() );
+ assertEquals( "Incorrect Persister class for " +
persistentClass.getMappedClass(),
+ SingleTableEntityPersister.class, persistentClass.getEntityPersisterClass() );
+ }
+
+ public void testCollectionPersisterSpecified() throws Exception {
+ //tests the persister specified by the @Persister annotation on a collection
+ Collection collection = (Collection) getCfg().getCollectionMapping(
Deck.class.getName() + ".cards" );
+ assertEquals( "Incorrect Persister class for collection " +
collection.getRole(), CollectionPersister.class,
+ collection.getCollectionPersisterClass() );
+ }
+
+ /**
+ * @see org.hibernate.test.annotations.TestCase#getMappings()
+ */
+ protected Class[] getMappings() {
+ return new Class[]{
+ Card.class,
+ Deck.class
+ };
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/Car.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/Car.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/Car.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: Car.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.polymorphism;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+import org.hibernate.annotations.PolymorphismType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
+(a)org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
+public class Car extends MovingThing {
+ private Integer id;
+ private String model;
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ @Id @GeneratedValue(strategy = GenerationType.TABLE )
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/MovingThing.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/MovingThing.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/MovingThing.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,8 @@
+//$Id: MovingThing.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.polymorphism;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MovingThing {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: PolymorphismTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.polymorphism;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PolymorphismTest extends TestCase {
+
+ public void testPolymorphism() throws Exception {
+ Car car = new Car();
+ car.setModel( "SUV" );
+ SportCar car2 = new SportCar();
+ car2.setModel( "350Z" );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ tx.begin();
+ s.persist( car );
+ s.persist( car2 );
+ s.flush();
+ assertEquals( 2, s.createQuery( "select car from Car car").list().size() );
+ assertEquals( 0, s.createQuery( "select count(m) from " +
MovingThing.class.getName() + " m").list().size() );
+ tx.rollback();
+ s.close();
+
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Car.class,
+ SportCar.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/SportCar.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/SportCar.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/polymorphism/SportCar.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,16 @@
+//$Id: SportCar.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.polymorphism;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.PolymorphismType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "sport_car")
+(a)org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT) //raise a
warn
+public class SportCar extends Car {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Area.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Area.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Area.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,73 @@
+//$Id: Area.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+import javax.persistence.SqlResultSetMappings;
+import javax.persistence.Table;
+
+/**
+ * Example of a entity load incl a join fetching of an associated *ToOne entity
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@NamedNativeQueries({
+@NamedNativeQuery(
+ name = "night&area", query = "select night.id as nid,
night.night_duration, night.night_date, area.id as aid, "
+ + "night.area_id, area.name from Night night, tbl_area area where night.area_id =
area.id",
+ resultSetMapping = "joinMapping")
+ })
+(a)org.hibernate.annotations.NamedNativeQueries({
+(a)org.hibernate.annotations.NamedNativeQuery(
+ name = "night&areaCached",
+ query = "select night.id as nid, night.night_duration, night.night_date, area.id
as aid, "
+ + "night.area_id, area.name from Night night, tbl_area area where night.area_id
= area.id",
+ resultSetMapping = "joinMapping")
+ })
+@SqlResultSetMappings(
+ @SqlResultSetMapping(name = "joinMapping", entities = {
+ @EntityResult(entityClass = org.hibernate.test.annotations.query.Night.class, fields =
{
+ @FieldResult(name = "id", column = "nid"),
+ @FieldResult(name = "duration", column = "night_duration"),
+ @FieldResult(name = "date", column = "night_date"),
+ @FieldResult(name = "area", column = "area_id")
+ }),
+ @EntityResult(entityClass = org.hibernate.test.annotations.query.Area.class, fields =
{
+ @FieldResult(name = "id", column = "aid"),
+ @FieldResult(name = "name", column = "name")
+ })
+ }
+ )
+)
+@Table(name = "tbl_area")
+public class Area {
+ private Integer id;
+ private String name;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(unique = true)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Captain.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Captain.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Captain.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,52 @@
+//$Id: Captain.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import java.io.Serializable;
+import javax.persistence.ColumnResult;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(Identity.class)
+@SqlResultSetMapping(name = "compositekey",
+ entities = @EntityResult(entityClass =
org.hibernate.test.annotations.query.SpaceShip.class,
+ fields = {
+ @FieldResult(name = "name", column = "name"),
+ @FieldResult(name = "model", column = "model"),
+ @FieldResult(name = "speed", column = "speed"),
+ @FieldResult(name = "dimensions.width", column = "width"),
+ @FieldResult(name = "captain.lastname", column = "lastn"),
+ @FieldResult(name = "dimensions.length", column = "length"),
+ @FieldResult(name = "captain.firstname", column = "firstn")
+ }),
+ columns = {@ColumnResult(name = "surface"),
+ @ColumnResult(name = "volume")})
+public class Captain implements Serializable {
+ private String firstname;
+ private String lastname;
+
+ @Id
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ @Id
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/CasimirParticle.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/CasimirParticle.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/CasimirParticle.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: CasimirParticle.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name="CASIMIR_PARTICULE")
+public class CasimirParticle {
+ @Id
+ private Long id;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Chaos.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Chaos.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Chaos.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,86 @@
+//$Id: Chaos.java 16293 2009-04-10 19:17:45Z gbadner $
+package org.hibernate.test.annotations.query;
+
+import java.util.Set;
+import java.util.HashSet;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.NamedQuery;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.JoinColumn;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.SQLInsert;
+import org.hibernate.annotations.SQLUpdate;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.SQLDeleteAll;
+import org.hibernate.annotations.Loader;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name="CHAOS")
+@SQLInsert( sql="INSERT INTO CHAOS(name, nick_name, chaos_size, id)
VALUES(upper(?),?,?,?)")
+@SQLUpdate( sql="UPDATE CHAOS SET name = upper(?), nick_name = ?, chaos_size = ?
WHERE id = ?")
+@SQLDelete( sql="DELETE CHAOS WHERE id = ?")
+@SQLDeleteAll( sql="DELETE CHAOS")
+@Loader(namedQuery = "chaos")
+@NamedNativeQuery(name="chaos", query="select id, chaos_size, name, lower(
nick_name ) as nick_name from CHAOS where id= ?", resultClass = Chaos.class)
+public class Chaos {
+ @Id
+ private Long id;
+ @Column(name="chaos_size")
+ private Long size;
+ private String name;
+ @Column(name="nick_name")
+ private String nickname;
+
+ @OneToMany
+ @JoinColumn(name="chaos_fk")
+ @SQLInsert( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = ? where id = ?")
+ @SQLDelete( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = null where id = ?")
+ private Set<CasimirParticle> particles = new HashSet<CasimirParticle>();
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getSize() {
+ return size;
+ }
+
+ public void setSize(Long size) {
+ this.size = size;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getNickname() {
+ return nickname;
+ }
+
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ public Set<CasimirParticle> getParticles() {
+ return particles;
+ }
+
+ public void setParticles(Set<CasimirParticle> particles) {
+ this.particles = particles;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dictionary.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dictionary.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dictionary.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,66 @@
+//$Id: Dictionary.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorColumn(name = "disc")
+@DiscriminatorValue("Dic")
+@SqlResultSetMapping(
+ name = "dictionary", entities = {
+@EntityResult(
+ entityClass = org.hibernate.test.annotations.query.Dictionary.class,
+ fields = {
+ @FieldResult(name = "id", column = "id"),
+ @FieldResult(name = "name", column = "name"),
+ @FieldResult(name = "editor", column = "editor")
+ },
+ discriminatorColumn = "type"
+)
+ }
+)
+@NamedNativeQuery(name = "all.dictionaries",
+ query = "select id, name, editor, disc as type from Dictionary",
+ resultSetMapping = "dictionary")
+public class Dictionary {
+ private Integer id;
+ private String name;
+ private String editor;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getEditor() {
+ return editor;
+ }
+
+ public void setEditor(String editor) {
+ this.editor = editor;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dimensions.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dimensions.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Dimensions.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: Dimensions.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class Dimensions {
+
+
+ private int length;
+ private int width;
+
+ public int getLength() {
+ return length;
+ }
+
+ public void setLength(int length) {
+ this.length = length;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Identity.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Identity.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Identity.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: Identity.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Identity implements Serializable {
+ private String firstname;
+ private String lastname;
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final Identity identity = (Identity) o;
+
+ if ( !firstname.equals( identity.firstname ) ) return false;
+ if ( !lastname.equals( identity.lastname ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = firstname.hashCode();
+ result = 29 * result + lastname.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Mark.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Mark.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Mark.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: Mark.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.ColumnResult;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * Example of scalar result (not working right now)
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@NamedNativeQuery(name = "average", query = "select avg(m.value) from Mark
m", resultSetMapping = "columnmapping")
+@SqlResultSetMapping(
+ name = "columnmapping",
+ columns = @ColumnResult(name = "aver")
+)
+public class Mark {
+ @Id
+ @GeneratedValue
+ public int id;
+ public int value;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Night.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Night.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/Night.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,66 @@
+//$Id: Night.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+
+/**
+ * Entity declaring a named query
+ *
+ * @author Emmanuel Bernard
+ */
+@Entity
+@NamedQuery(name = "night.moreRecentThan", query = "select n from Night n
where n.date >= :date")
+(a)org.hibernate.annotations.NamedQuery(
+ name = "night.duration",
+ query = "select n from Night n where n.duration = :duration",
+ cacheable = true, cacheRegion = "nightQuery"
+)
+public class Night {
+ private Integer id;
+ private long duration;
+ private Date date;
+ private Area area;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(name = "night_duration")
+ public long getDuration() {
+ return duration;
+ }
+
+ public void setDuration(long duration) {
+ this.duration = duration;
+ }
+
+ @Column(name = "night_date")
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+ @ManyToOne
+ public Area getArea() {
+ return area;
+ }
+
+ public void setArea(Area area) {
+ this.area = area;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/QueryAndSQLTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/QueryAndSQLTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/QueryAndSQLTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,380 @@
+//$Id: QueryAndSQLTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.stat.Statistics;
+import org.hibernate.test.annotations.A320;
+import org.hibernate.test.annotations.A320b;
+import org.hibernate.test.annotations.Plane;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Test named queries
+ *
+ * @author Emmanuel Bernard
+ */
+public class QueryAndSQLTest extends TestCase {
+ public QueryAndSQLTest(String x) {
+ super( x );
+ }
+
+ public void testPackageQueries() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Plane p = new Plane();
+ s.persist( p );
+ Query q = s.getNamedQuery( "plane.getAll" );
+ assertEquals( 1, q.list().size() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testClassQueries() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Night n = new Night();
+ Calendar c = new GregorianCalendar();
+ c.set( 2000, 2, 2 );
+ Date now = c.getTime();
+ c.add( Calendar.MONTH, -1 );
+ Date aMonthAgo = c.getTime();
+ c.add( Calendar.MONTH, 2 );
+ Date inAMonth = c.getTime();
+ n.setDate( now );
+ n.setDuration( 14 );
+ s.persist( n );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.getNamedQuery( "night.moreRecentThan" );
+ q.setDate( "date", aMonthAgo );
+ assertEquals( 1, q.list().size() );
+ q = s.getNamedQuery( "night.moreRecentThan" );
+ q.setDate( "date", inAMonth );
+ assertEquals( 0, q.list().size() );
+ Statistics stats = getSessions().getStatistics();
+ stats.setStatisticsEnabled( true );
+ stats.clear();
+ q = s.getNamedQuery( "night.duration" );
+ q.setParameter( "duration", 14l );
+ assertEquals( 1, q.list().size() );
+ assertEquals( 1, stats.getQueryCachePutCount() );
+ q = s.getNamedQuery( "night.duration" );
+ q.setParameter( "duration", 14l );
+ s.delete( q.list().get( 0 ) );
+ assertEquals( 1, stats.getQueryCacheHitCount() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSQLQuery() {
+ Night n = new Night();
+ Calendar c = new GregorianCalendar();
+ c.set( 2000, 2, 2 );
+ Date now = c.getTime();
+ c.add( Calendar.MONTH, -1 );
+ Date aMonthAgo = c.getTime();
+ c.add( Calendar.MONTH, 2 );
+ Date inAMonth = c.getTime();
+ n.setDate( now );
+ n.setDuration( 9999 );
+ Area area = new Area();
+ area.setName( "Monceau" );
+
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( n );
+ s.persist( area );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ Query q = s.getNamedQuery( "night.getAll.bySQL" );
+ q.setParameter( 0, 9990 );
+ List result = q.list();
+ assertEquals( 1, result.size() );
+ Night n2 = (Night) result.get( 0 );
+ assertEquals( n2.getDuration(), n.getDuration() );
+ List areas = s.getNamedQuery( "getAreaByNative" ).list();
+ assertTrue( 1 == areas.size() );
+ assertEquals( area.getName(), ( (Area) areas.get( 0 ) ).getName() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testSQLQueryWithManyToOne() {
+ Night n = new Night();
+ Calendar c = new GregorianCalendar();
+ c.set( 2000, 2, 2 );
+ Date now = c.getTime();
+ c.add( Calendar.MONTH, -1 );
+ Date aMonthAgo = c.getTime();
+ c.add( Calendar.MONTH, 2 );
+ Date inAMonth = c.getTime();
+ n.setDate( now );
+ n.setDuration( 9999 );
+ Area a = new Area();
+ a.setName( "Paris" );
+ n.setArea( a );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ s.persist( a );
+ s.persist( n );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Statistics stats = getSessions().getStatistics();
+ stats.setStatisticsEnabled( true );
+ Query q = s.getNamedQuery( "night&areaCached" );
+ List result = q.list();
+ assertEquals( 1, result.size() );
+ assertEquals( 1, stats.getQueryCachePutCount() );
+ q.list();
+ assertEquals( 1, stats.getQueryCacheHitCount() );
+ Night n2 = (Night) ( (Object[]) result.get( 0 ) )[0];
+ assertEquals( n2.getDuration(), n.getDuration() );
+ tx.commit();
+ s.close();
+ }
+
+ public void testImplicitNativeQuery() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ SpaceShip ship = new SpaceShip();
+ ship.setModel( "X-Wing" );
+ ship.setName( "YuBlue" );
+ ship.setSpeed( 2000 );
+ ship.setDimensions( new Dimensions() );
+ s.persist( ship );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ Query q = s.getNamedQuery( "implicitSample" );
+ List result = q.list();
+ assertEquals( 1, result.size() );
+ assertEquals( ship.getModel(), ( (SpaceShip) result.get( 0 ) ).getModel() );
+ s.delete( result.get( 0 ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testNativeQueryAndCompositePKAndComponents() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ SpaceShip ship = new SpaceShip();
+ ship.setModel( "X-Wing" );
+ ship.setName( "YuBlue" );
+ ship.setSpeed( 2000 );
+ ship.setDimensions( new Dimensions() );
+ ship.getDimensions().setLength( 10 );
+ ship.getDimensions().setWidth( 5 );
+ Captain captain = new Captain();
+ captain.setFirstname( "Luke" );
+ captain.setLastname( "Skywalker" );
+ ship.setCaptain( captain );
+ s.persist( captain );
+ s.persist( ship );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ Query q = s.getNamedQuery( "compositekey" );
+ List result = q.list();
+ assertEquals( 1, result.size() );
+ Object[] row = (Object[]) result.get( 0 );
+ SpaceShip spaceShip = (SpaceShip) row[0];
+ assertEquals( ship.getModel(), spaceShip.getModel() );
+ assertNotNull( spaceShip.getDimensions() );
+ assertEquals( ship.getDimensions().getWidth(), spaceShip.getDimensions().getWidth() );
+ assertEquals( ship.getDimensions().getLength(), spaceShip.getDimensions().getLength()
);
+ assertEquals( ship.getCaptain().getFirstname(), ship.getCaptain().getFirstname() );
+ assertEquals( ship.getCaptain().getLastname(), ship.getCaptain().getLastname() );
+ //FIXME vary depending on databases
+ assertTrue( row[1].toString().startsWith( "50" ) );
+ assertTrue( row[2].toString().startsWith( "500" ) );
+ s.delete( spaceShip.getCaptain() );
+ s.delete( spaceShip );
+ tx.commit();
+ s.close();
+ }
+
+ public void testDiscriminator() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Dictionary dic = new Dictionary();
+ dic.setName( "Anglais-Francais" );
+ dic.setEditor( "Harrap's" );
+ SynonymousDictionary syn = new SynonymousDictionary();
+ syn.setName( "Synonymes de tous les temps" );
+ syn.setEditor( "Imagination edition" );
+ s.persist( dic );
+ s.persist( syn );
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ List results = s.getNamedQuery( "all.dictionaries" ).list();
+ assertEquals( 2, results.size() );
+ assertTrue(
+ results.get( 0 ) instanceof SynonymousDictionary
+ || results.get( 1 ) instanceof SynonymousDictionary
+ );
+ tx.commit();
+ s.close();
+ }
+
+// public void testScalarQuery() throws Exception {
+// Session s = openSession();
+// Transaction tx;
+// tx = s.beginTransaction();
+// Mark bad = new Mark();
+// bad.value = 5;
+// Mark good = new Mark();
+// good.value = 15;
+// s.persist(bad);
+// s.persist(good);
+// tx.commit();
+// s.clear();
+// tx = s.beginTransaction();
+// List result = s.getNamedQuery("average").list();
+// assertEquals( 1, result.size() );
+// tx.commit();
+// s.close();
+//
+// }
+
+ public void testCache() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Plane plane = new Plane();
+ plane.setNbrOfSeats( 5 );
+ s.persist( plane );
+ tx.commit();
+ s.close();
+ getSessions().getStatistics().clear();
+ getSessions().getStatistics().setStatisticsEnabled( true );
+ s = openSession();
+ tx = s.beginTransaction();
+ Query query = s.getNamedQuery( "plane.byId" ).setParameter( "id",
plane.getId() );
+ plane = (Plane) query.uniqueResult();
+ assertEquals( 1, getSessions().getStatistics().getQueryCachePutCount() );
+ plane = (Plane) s.getNamedQuery( "plane.byId" ).setParameter( "id",
plane.getId() ).uniqueResult();
+ assertEquals( 1, getSessions().getStatistics().getQueryCacheHitCount() );
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ s.delete( s.get( Plane.class, plane.getId() ) );
+ tx.commit();
+ s.close();
+ }
+
+ public void testEntitySQLOverriding() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Chaos chaos = new Chaos();
+ chaos.setSize( 123l );
+ chaos.setId( 1l );
+
+ String lowerName = "hello";
+ String upperName = lowerName.toUpperCase();
+ assertFalse( lowerName.equals( upperName ) );
+
+ chaos.setName( "hello" );
+ chaos.setNickname( "NickName" );
+ s.persist( chaos );
+ s.flush();
+ s.clear();
+ s.getSessionFactory().evict( Chaos.class );
+
+ Chaos resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
+ assertEquals( upperName, resultChaos.getName() );
+ assertEquals( "nickname", resultChaos.getNickname() );
+
+ tx.rollback();
+ s.close();
+ }
+
+ public void testCollectionSQLOverriding() {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Chaos chaos = new Chaos();
+ chaos.setSize( 123l );
+ chaos.setId( 1l );
+
+ chaos.setName( "hello" );
+ s.persist( chaos );
+ CasimirParticle p = new CasimirParticle();
+ p.setId( 1l );
+ s.persist( p );
+ chaos.getParticles().add(p);
+ p = new CasimirParticle();
+ p.setId( 2l );
+ s.persist( p );
+ chaos.getParticles().add(p);
+ s.flush();
+ s.clear();
+ s.getSessionFactory().evict( Chaos.class );
+
+ Chaos resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
+ assertEquals( 2, resultChaos.getParticles().size() );
+ resultChaos.getParticles().remove( resultChaos.getParticles().iterator().next() );
+ resultChaos.getParticles().remove( resultChaos.getParticles().iterator().next() );
+ s.flush();
+
+ s.clear();
+ resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
+ assertEquals( 0, resultChaos.getParticles().size() );
+
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Plane.class,
+ A320.class,
+ A320b.class,
+ Night.class,
+ Area.class,
+ SpaceShip.class,
+ Dictionary.class,
+ SynonymousDictionary.class,
+ Captain.class,
+ Chaos.class,
+ CasimirParticle.class
+ };
+ }
+
+ protected String[] getAnnotatedPackages() {
+ return new String[]{
+ "org.hibernate.test.annotations.query"
+ };
+ }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[]{
+ "org/hibernate/test/annotations/query/orm.xml"
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SpaceShip.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SpaceShip.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SpaceShip.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,80 @@
+//$Id: SpaceShip.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@SqlResultSetMapping(name = "implicit",
+ entities = @EntityResult(entityClass =
org.hibernate.test.annotations.query.SpaceShip.class))
+@NamedNativeQueries({
+@NamedNativeQuery(name = "implicitSample", query = "select * from
SpaceShip", resultSetMapping = "implicit"),
+@NamedNativeQuery(name = "compositekey",
+ query = "select name, model, speed, lname as lastn, fname as firstn, length,
width, length * width as surface, length * width *10 as volume from SpaceShip",
+ resultSetMapping = "compositekey")
+ })
+//we're missins @SqlREsultSetMappings so look at Captain
+public class SpaceShip {
+ private String name;
+ private String model;
+ private double speed;
+ private Captain captain;
+ private Dimensions dimensions;
+
+ @Id
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumns({
+ @JoinColumn(name = "fname", referencedColumnName = "firstname"),
+ @JoinColumn(name = "lname", referencedColumnName = "lastname")
+ })
+ public Captain getCaptain() {
+ return captain;
+ }
+
+ public void setCaptain(Captain captain) {
+ this.captain = captain;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public double getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(double speed) {
+ this.speed = speed;
+ }
+
+ public Dimensions getDimensions() {
+ return dimensions;
+ }
+
+ public void setDimensions(Dimensions dimensions) {
+ this.dimensions = dimensions;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SynonymousDictionary.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SynonymousDictionary.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/SynonymousDictionary.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$Id: SynonymousDictionary.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@DiscriminatorValue("Syn")
+public class SynonymousDictionary extends Dictionary {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/orm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/orm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/query/orm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="1.0"
+ >
+ <named-query name="plane.getAll">
+ <query>select p from Plane p</query>
+ </named-query>
+ <named-native-query name="night.getAll.bySQL"
result-set-mapping="sqlmapping">
+ <query>select id, night_duration, night_date as dte, area_id from Night
where night_duration > ?</query>
+ </named-native-query>
+ <named-native-query name="getAreaByNative"
result-class="org.hibernate.test.annotations.query.Area">
+ <query>select * from tbl_area</query>
+ </named-native-query>
+ <sql-result-set-mapping name="sqlmapping">
+ <entity-result
entity-class="org.hibernate.test.annotations.query.Night">
+ <field-result name="id" column="id"/>
+ <field-result name="duration"
column="night_duration"/>
+ <field-result name="date" column="dte"/>
+ <field-result name="area" column="area_id"/>
+ </entity-result>
+ </sql-result-set-mapping>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/QuoteTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/QuoteTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/QuoteTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: QuoteTest.java 14735 2008-06-04 14:05:50Z hardy.ferentschik $
+package org.hibernate.test.annotations.quote;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class QuoteTest extends TestCase {
+ public void testQuoteManytoMany() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ User u = new User();
+ s.persist( u );
+ Role r = new Role();
+ s.persist( r );
+ u.getRoles().add( r );
+ s.flush();
+ s.clear();
+ u = (User) s.get( User.class, u.getId() );
+ assertEquals( 1, u.getRoles().size() );
+ tx.rollback();
+ String role = User.class.getName() + ".roles";
+ assertEquals( "User_Role", getCfg().getCollectionMapping( role
).getCollectionTable().getName() );
+ s.close();
+ }
+ protected Class[] getMappings() {
+ return new Class[] {
+ User.class,
+ Role.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/Role.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/Role.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/Role.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: Role.java 14735 2008-06-04 14:05:50Z hardy.ferentschik $
+package org.hibernate.test.annotations.quote;
+
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.GenerationType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "`Role`")
+public class Role implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/User.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/User.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/quote/User.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: User.java 14735 2008-06-04 14:05:50Z hardy.ferentschik $
+package org.hibernate.test.annotations.quote;
+
+import java.io.Serializable;
+import java.util.Set;
+import java.util.HashSet;
+import javax.persistence.ManyToMany;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "`User`")
+public class User implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+
+ @ManyToMany
+ private Set<Role> roles = new HashSet<Role>();
+
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Set<Role> getRoles() {
+ return roles;
+ }
+
+ public void setRoles(Set<Role> roles) {
+ this.roles = roles;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Bag.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Bag.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Bag.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+//$Id: Bag.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Bag {
+ private Integer id;
+ private String serial;
+ private Rambler owner;
+
+ public Bag() {
+ }
+
+ public Bag(String serial, Rambler owner) {
+ this.serial = serial;
+ this.owner = owner;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(unique = true)
+ public String getSerial() {
+ return serial;
+ }
+
+ public void setSerial(String serial) {
+ this.serial = serial;
+ }
+
+ @ManyToOne
+ @JoinColumn(referencedColumnName = "fld_name")
+ public Rambler getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Rambler owner) {
+ this.owner = owner;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Clothes.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Clothes.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Clothes.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,69 @@
+//$Id: Clothes.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Clothes {
+ private Integer id;
+ private String type;
+ private String flavor;
+
+ public Clothes() {
+ }
+
+ public Clothes(String type, String flavor) {
+ this.type = type;
+ this.flavor = flavor;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getFlavor() {
+ return flavor;
+ }
+
+ public void setFlavor(String flavor) {
+ this.flavor = flavor;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Clothes ) ) return false;
+
+ final Clothes clothes = (Clothes) o;
+
+ if ( !flavor.equals( clothes.flavor ) ) return false;
+ if ( !type.equals( clothes.type ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = type.hashCode();
+ result = 29 * result + flavor.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/House.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/House.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/House.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,80 @@
+//$Id: House.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class House implements Serializable {
+ private Integer id;
+ private String address;
+ private Postman postman;
+ private Set<Inhabitant> hasInhabitants = new HashSet<Inhabitant>();
+
+ @ManyToOne
+ @JoinColumn(referencedColumnName = "name")
+ public Postman getPostman() {
+ return postman;
+ }
+
+ public void setPostman(Postman postman) {
+ this.postman = postman;
+ }
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ @ManyToMany
+ @JoinTable(joinColumns = @JoinColumn(referencedColumnName = "address"),
+ inverseJoinColumns = @JoinColumn(referencedColumnName = "name")
+ )
+ public Set<Inhabitant> getHasInhabitants() {
+ return hasInhabitants;
+ }
+
+ public void setHasInhabitants(Set<Inhabitant> hasInhabitants) {
+ this.hasInhabitants = hasInhabitants;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof House ) ) return false;
+
+ final House house = (House) o;
+
+ if ( address != null ? !address.equals( house.address ) : house.address != null )
return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return ( address != null ? address.hashCode() : 0 );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: Inhabitant.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Inhabitant implements Serializable {
+ private Integer id;
+ private String name;
+ private Set<House> livesIn = new HashSet<House>();
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToMany(mappedBy = "hasInhabitants")
+ public Set<House> getLivesIn() {
+ return livesIn;
+ }
+
+ public void setLivesIn(Set<House> livesIn) {
+ this.livesIn = livesIn;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Inhabitant ) ) return false;
+
+ final Inhabitant inhabitant = (Inhabitant) o;
+
+ if ( name != null ? !name.equals( inhabitant.name ) : inhabitant.name != null ) return
false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return ( name != null ? name.hashCode() : 0 );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Item.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Item.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Item.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,23 @@
+//$Id: Item.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Item {
+ int id;
+
+ @Id
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,55 @@
+//$Id: ItemCost.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class ItemCost implements Serializable {
+ int id;
+ Item item;
+ Vendor vendor;
+ BigDecimal cost;
+
+
+ @Id
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @ManyToOne
+ public Item getItem() {
+ return item;
+ }
+
+ public void setItem(Item item) {
+ this.item = item;
+ }
+
+ @ManyToOne
+ public Vendor getVendor() {
+ return vendor;
+ }
+
+ public void setVendor(Vendor vendor) {
+ this.vendor = vendor;
+ }
+
+ public BigDecimal getCost() {
+ return cost;
+ }
+
+ public void setCost(BigDecimal cost) {
+ this.cost = cost;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Luggage.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Luggage.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Luggage.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,90 @@
+//$Id: Luggage.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Luggage implements Serializable {
+ private Integer id;
+ private String owner;
+ private String type;
+ private Set<Clothes> hasInside = new HashSet<Clothes>();
+
+ public Luggage() {
+ }
+
+ public Luggage(String owner, String type) {
+ this.owner = owner;
+ this.type = type;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinColumns({
+ @JoinColumn(name = "lug_type", referencedColumnName = "type"),
+ @JoinColumn(name = "lug_owner", referencedColumnName = "owner")
+ })
+ public Set<Clothes> getHasInside() {
+ return hasInside;
+ }
+
+ public void setHasInside(Set<Clothes> hasInside) {
+ this.hasInside = hasInside;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Luggage ) ) return false;
+
+ final Luggage luggage = (Luggage) o;
+
+ if ( !owner.equals( luggage.owner ) ) return false;
+ if ( !type.equals( luggage.type ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = owner.hashCode();
+ result = 29 * result + type.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Postman.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Postman.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Postman.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,40 @@
+//$Id: Postman.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Postman implements Serializable {
+ private String name;
+ private String id;
+
+ public Postman() {
+ }
+
+ @Id
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public Postman(String name, String id) {
+ this.name = name;
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Rambler.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Rambler.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Rambler.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+//$Id: Rambler.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Rambler implements Serializable {
+ private Integer id;
+ private String name;
+ private Set<Bag> bags = new HashSet<Bag>();
+
+ public Rambler() {
+ }
+
+ public Rambler(String name) {
+ this.name = name;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Column(name = "fld_name")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "owner", cascade = {CascadeType.PERSIST,
CascadeType.MERGE})
+ public Set<Bag> getBags() {
+ return bags;
+ }
+
+ public void setBags(Set<Bag> bags) {
+ this.bags = bags;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,196 @@
+//$Id: ReferencedColumnNameTest.java 16289 2009-04-09 22:09:50Z gbadner $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.util.Iterator;
+import java.math.BigDecimal;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ReferencedColumnNameTest extends TestCase {
+ public void testManyToOne() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Postman pm = new Postman( "Bob", "A01" );
+ House house = new House();
+ house.setPostman( pm );
+ house.setAddress( "Rue des pres" );
+ s.persist( pm );
+ s.persist( house );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ house = (House) s.get( House.class, house.getId() );
+ assertNotNull( house.getPostman() );
+ assertEquals( "Bob", house.getPostman().getName() );
+ pm = house.getPostman();
+ s.delete( house );
+ s.delete( pm );
+ tx.commit();
+ s.close();
+ }
+
+ public void testOneToMany() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+
+ Rambler rambler = new Rambler( "Emmanuel" );
+ Bag bag = new Bag( "0001", rambler );
+ rambler.getBags().add( bag );
+ s.persist( rambler );
+
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+
+ bag = (Bag) s.createQuery( "select b from Bag b left join fetch b.owner"
).uniqueResult();
+ assertNotNull( bag );
+ assertNotNull( bag.getOwner() );
+
+ rambler = (Rambler) s.createQuery( "select r from Rambler r left join fetch
r.bags" ).uniqueResult();
+ assertNotNull( rambler );
+ assertNotNull( rambler.getBags() );
+ assertEquals( 1, rambler.getBags().size() );
+ s.delete( rambler.getBags().iterator().next() );
+ s.delete( rambler );
+
+ tx.commit();
+ s.close();
+ }
+
+ public void testUnidirectionalOneToMany() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+
+ Clothes clothes = new Clothes( "underwear", "interesting" );
+ Luggage luggage = new Luggage( "Emmanuel", "Cabin Luggage" );
+ luggage.getHasInside().add( clothes );
+ s.persist( luggage );
+
+ tx.commit();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+
+ luggage = (Luggage) s.createQuery( "select l from Luggage l left join fetch
l.hasInside" ).uniqueResult();
+ assertNotNull( luggage );
+ assertNotNull( luggage.getHasInside() );
+ assertEquals( 1, luggage.getHasInside().size() );
+
+ s.delete( luggage.getHasInside().iterator().next() );
+ s.delete( luggage );
+
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToMany() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+
+ House whiteHouse = new House();
+ whiteHouse.setAddress( "1600 Pennsylvania Avenue, Washington" );
+ Inhabitant bill = new Inhabitant();
+ bill.setName( "Bill Clinton" );
+ Inhabitant george = new Inhabitant();
+ george.setName( "George W Bush" );
+ s.persist( george );
+ s.persist( bill );
+ whiteHouse.getHasInhabitants().add( bill );
+ whiteHouse.getHasInhabitants().add( george );
+ //bill.getLivesIn().add( whiteHouse );
+ //george.getLivesIn().add( whiteHouse );
+
+ s.persist( whiteHouse );
+ tx.commit();
+ s = openSession();
+ tx = s.beginTransaction();
+
+ whiteHouse = (House) s.get( House.class, whiteHouse.getId() );
+ assertNotNull( whiteHouse );
+ assertEquals( 2, whiteHouse.getHasInhabitants().size() );
+
+ tx.commit();
+ s.clear();
+ tx = s.beginTransaction();
+ bill = (Inhabitant) s.get( Inhabitant.class, bill.getId() );
+ assertNotNull( bill );
+ assertEquals( 1, bill.getLivesIn().size() );
+ assertEquals( whiteHouse.getAddress(), bill.getLivesIn().iterator().next().getAddress()
);
+
+ whiteHouse = bill.getLivesIn().iterator().next();
+ s.delete( whiteHouse );
+ Iterator it = whiteHouse.getHasInhabitants().iterator();
+ while ( it.hasNext() ) {
+ s.delete( it.next() );
+ }
+ tx.commit();
+ s.close();
+ }
+
+ public void testManyToOneReferenceManyToOne() throws Exception {
+ Item item = new Item();
+ item.setId( 1 );
+ Vendor vendor = new Vendor();
+ vendor.setId( 1 );
+ ItemCost cost = new ItemCost();
+ cost.setCost( new BigDecimal(1) );
+ cost.setId( 1 );
+ cost.setItem( item );
+ cost.setVendor( vendor );
+ WarehouseItem wItem = new WarehouseItem();
+ wItem.setDefaultCost( cost );
+ wItem.setId( 1 );
+ wItem.setItem( item );
+ wItem.setQtyInStock( new BigDecimal(1) );
+ wItem.setVendor( vendor );
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( item );
+ s.persist( vendor );
+ s.persist( cost );
+ s.persist( wItem );
+ s.flush();
+ s.clear();
+ wItem = (WarehouseItem) s.get(WarehouseItem.class, wItem.getId() );
+ assertNotNull( wItem.getDefaultCost().getItem() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public ReferencedColumnNameTest(String x) {
+ super( x );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ House.class,
+ Postman.class,
+ Bag.class,
+ Rambler.class,
+ Luggage.class,
+ Clothes.class,
+ Inhabitant.class,
+ Item.class,
+ ItemCost.class,
+ Vendor.class,
+ WarehouseItem.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Vendor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Vendor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/Vendor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: Vendor.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Id;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Vendor {
+ int id;
+
+ @Id
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,71 @@
+//$Id: WarehouseItem.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.math.BigDecimal;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class WarehouseItem {
+
+ int id;
+ Item item;
+ Vendor vendor;
+ ItemCost defaultCost;
+ BigDecimal qtyInStock;
+
+ @Id
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public BigDecimal getQtyInStock() {
+ return qtyInStock;
+ }
+
+ public void setQtyInStock(BigDecimal qtyInStock) {
+ this.qtyInStock = qtyInStock;
+ }
+
+ @ManyToOne
+ public Item getItem() {
+ return item;
+ }
+
+ public void setItem(Item item) {
+ this.item = item;
+ }
+
+ @ManyToOne
+ public Vendor getVendor() {
+ return vendor;
+ }
+
+ public void setVendor(Vendor vendor) {
+ this.vendor = vendor;
+ }
+
+ @ManyToOne
+ @JoinColumns({
+ @JoinColumn(name="vendor_id", referencedColumnName="vendor_id",
insertable=false, updatable=false),
+ @JoinColumn(name="item_id", referencedColumnName="item_id",
insertable=false, updatable=false)
+ })
+ public ItemCost getDefaultCost() {
+ return defaultCost;
+ }
+
+ public void setDefaultCost(ItemCost defaultCost) {
+ this.defaultCost = defaultCost;
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Administration.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Administration.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Administration.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,77 @@
+//$Id: Administration.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+import javax.persistence.PostLoad;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity(name = "JavaAdministration")
+@Table(name = "JavaAdministration")
+@SecondaryTable(name = "Extend")
+public class Administration extends Organization {
+ @Id
+ private Integer id;
+ private String firstname;
+ private String lastname;
+ private String address;
+ private Integer version;
+ @Basic
+ private String transientField;
+ @OneToOne
+ @JoinColumns({@JoinColumn(name = "busNumber_fk"), @JoinColumn(name =
"busDriver_fk")})
+ private BusTrip defaultBusTrip;
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public Integer getVersion() {
+ return version;
+ }
+
+ public void setVersion(Integer version) {
+ this.version = version;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ @PostLoad
+ public void calculate() {
+ //...
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Availability.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Availability.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Availability.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+//$Id: Availability.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Availability {
+ ON_DUTY,
+ NO_SERVICE
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTrip.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTrip.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTrip.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: BusTrip.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class BusTrip {
+ private BusTripPk id;
+ private Availability status;
+ private byte[] serial;
+ private Date terminusTime;
+ private Map<String, SocialSecurityPhysicalAccount> players;
+ private List roads;
+
+ @EmbeddedId
+ public BusTripPk getId() {
+ return id;
+ }
+
+ public void setId(BusTripPk id) {
+ this.id = id;
+ }
+
+ public Availability getStatus() {
+ return status;
+ }
+
+ public void setStatus(Availability status) {
+ this.status = status;
+ }
+
+ public byte[] getSerial() {
+ return serial;
+ }
+
+ public void setSerial(byte[] serial) {
+ this.serial = serial;
+ }
+
+ public Date getTerminusTime() {
+ return terminusTime;
+ }
+
+ public void setTerminusTime(Date terminusTime) {
+ this.terminusTime = terminusTime;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTripPk.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTripPk.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/BusTripPk.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: BusTripPk.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BusTripPk {
+ private String busNumber;
+ private String busDriver;
+
+ public String getBusDriver() {
+ return busDriver;
+ }
+
+ public void setBusDriver(String busDriver) {
+ this.busDriver = busDriver;
+ }
+
+ public String getBusNumber() {
+ return busNumber;
+ }
+
+ public void setBusNumber(String busNumber) {
+ this.busNumber = busNumber;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Competition.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Competition.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Competition.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: Competition.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@MappedSuperclass
+public class Competition {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,434 @@
+//$Id: EJB3OverridenAnnotationReaderTest.java 14736 2008-06-04 14:23:42Z
hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.AssociationOverrides;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Embedded;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.ExcludeDefaultListeners;
+import javax.persistence.ExcludeSuperclassListeners;
+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.JoinColumns;
+import javax.persistence.JoinTable;
+import javax.persistence.Lob;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedQueries;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+import javax.persistence.SecondaryTable;
+import javax.persistence.SecondaryTables;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.SqlResultSetMappings;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+import javax.persistence.PrePersist;
+import javax.persistence.EntityListeners;
+import javax.persistence.PostLoad;
+import javax.persistence.PostPersist;
+
+import junit.framework.TestCase;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+import org.hibernate.annotations.Columns;
+import org.hibernate.cfg.EJB3DTDEntityResolver;
+import org.hibernate.cfg.annotations.reflection.EJB3OverridenAnnotationReader;
+import org.hibernate.cfg.annotations.reflection.XMLContext;
+import org.hibernate.util.XMLHelper;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotSupportedException;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EJB3OverridenAnnotationReaderTest extends TestCase {
+ public void testMappedSuperclassAnnotations() throws Exception {
+ XMLContext context = buildContext(
+ "org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader(
Organization.class, context );
+ assertTrue( reader.isAnnotationPresent( MappedSuperclass.class ) );
+ }
+
+ public void testEntityRelatedAnnotations() throws Exception {
+ XMLContext context = buildContext(
"org/hibernate/test/annotations/reflection/orm.xml" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader(
Administration.class, context );
+ assertNotNull( reader.getAnnotation( Entity.class ) );
+ assertEquals(
+ "Default value in xml entity should not override @Entity.name",
"JavaAdministration",
+ reader.getAnnotation( Entity.class ).name()
+ );
+ assertNotNull( reader.getAnnotation( Table.class ) );
+ assertEquals( "@Table not overriden", "tbl_admin",
reader.getAnnotation( Table.class ).name() );
+ assertEquals( "Default schema not overriden", "myschema",
reader.getAnnotation( Table.class ).schema() );
+ assertEquals(
+ "Proper @Table.uniqueConstraints", 2,
+ reader.getAnnotation( Table.class ).uniqueConstraints()[0].columnNames().length
+ );
+ String columnName = reader.getAnnotation( Table.class
).uniqueConstraints()[0].columnNames()[0];
+ assertTrue(
+ "Proper @Table.uniqueConstraints", "firstname".equals( columnName
) || "lastname".equals( columnName )
+ );
+ assertNull( "Both Java and XML used", reader.getAnnotation(
SecondaryTable.class ) );
+ assertNotNull( "XML does not work", reader.getAnnotation(
SecondaryTables.class ) );
+ SecondaryTable[] tables = reader.getAnnotation( SecondaryTables.class ).value();
+ assertEquals( 1, tables.length );
+ assertEquals( "admin2", tables[0].name() );
+ assertEquals( "unique constraints ignored", 1,
tables[0].uniqueConstraints().length );
+ assertEquals( "pk join column ignored", 1, tables[0].pkJoinColumns().length
);
+ assertEquals( "pk join column ignored", "admin_id",
tables[0].pkJoinColumns()[0].name() );
+ assertNotNull( "Sequence Overriding not working", reader.getAnnotation(
SequenceGenerator.class ) );
+ assertEquals(
+ "wrong sequence name", "seqhilo", reader.getAnnotation(
SequenceGenerator.class ).sequenceName()
+ );
+ assertEquals( "default fails", 50, reader.getAnnotation(
SequenceGenerator.class ).allocationSize() );
+ assertNotNull( "TableOverriding not working", reader.getAnnotation(
TableGenerator.class ) );
+ assertEquals( "wrong tble name", "tablehilo", reader.getAnnotation(
TableGenerator.class ).table() );
+ assertEquals( "no schema overriding", "myschema",
reader.getAnnotation( TableGenerator.class ).schema() );
+
+ reader = new EJB3OverridenAnnotationReader( Match.class, context );
+ assertNotNull( reader.getAnnotation( Table.class ) );
+ assertEquals(
+ "Java annotation not taken into account", "matchtable",
reader.getAnnotation( Table.class ).name()
+ );
+ assertEquals(
+ "Java annotation not taken into account", "matchschema",
reader.getAnnotation( Table.class ).schema()
+ );
+ assertEquals( "Overriding not taken into account", "mycatalog",
reader.getAnnotation( Table.class ).catalog() );
+ assertNotNull( "SecondaryTable swallowed", reader.getAnnotation(
SecondaryTables.class ) );
+ assertEquals(
+ "Default schema not taken into account", "myschema",
+ reader.getAnnotation( SecondaryTables.class ).value()[0].schema()
+ );
+ assertNotNull( reader.getAnnotation( Inheritance.class ) );
+ assertEquals(
+ "inheritance strategy not overriden", InheritanceType.JOINED,
+ reader.getAnnotation( Inheritance.class ).strategy()
+ );
+ assertNotNull( "NamedQuery not overriden", reader.getAnnotation(
NamedQueries.class ) );
+ assertEquals( "No deduplication", 3, reader.getAnnotation( NamedQueries.class
).value().length );
+ assertEquals(
+ "deduplication kept the Java version", 1,
+ reader.getAnnotation( NamedQueries.class ).value()[1].hints().length
+ );
+ assertEquals(
+ "org.hibernate.timeout", reader.getAnnotation( NamedQueries.class
).value()[1].hints()[0].name()
+ );
+ assertNotNull( "NamedNativeQuery not overriden", reader.getAnnotation(
NamedNativeQueries.class ) );
+ assertEquals( "No deduplication", 3, reader.getAnnotation(
NamedNativeQueries.class ).value().length );
+ assertEquals(
+ "deduplication kept the Java version", 1,
+ reader.getAnnotation( NamedNativeQueries.class ).value()[1].hints().length
+ );
+ assertEquals(
+ "org.hibernate.timeout", reader.getAnnotation( NamedNativeQueries.class
).value()[1].hints()[0].name()
+ );
+ assertNotNull( reader.getAnnotation( SqlResultSetMappings.class ) );
+ assertEquals(
+ "competitor1Point", reader.getAnnotation( SqlResultSetMappings.class
).value()[0].columns()[0].name()
+ );
+ assertEquals(
+ "competitor1Point",
+ reader.getAnnotation( SqlResultSetMappings.class
).value()[0].entities()[0].fields()[0].column()
+ );
+ assertNotNull( reader.getAnnotation( ExcludeSuperclassListeners.class ) );
+ assertNotNull( reader.getAnnotation( ExcludeDefaultListeners.class ) );
+
+ reader = new EJB3OverridenAnnotationReader( Competition.class, context );
+ assertNotNull( reader.getAnnotation( MappedSuperclass.class ) );
+
+ reader = new EJB3OverridenAnnotationReader( TennisMatch.class, context );
+ assertNull( "Mutualize PKJC into PKJCs", reader.getAnnotation(
PrimaryKeyJoinColumn.class ) );
+ assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
+ assertEquals(
+ "PrimaryKeyJoinColumn overrden", "id",
+ reader.getAnnotation( PrimaryKeyJoinColumns.class ).value()[0].name()
+ );
+ assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
+ assertEquals( "Wrong deduplication", 3, reader.getAnnotation(
AttributeOverrides.class ).value().length );
+ assertEquals(
+ "Wrong priority (XML vs java annotations)", "fld_net",
+ reader.getAnnotation( AttributeOverrides.class ).value()[0].column().name()
+ );
+ assertEquals(
+ "Column mapping", 2, reader.getAnnotation( AttributeOverrides.class
).value()[1].column().scale()
+ );
+ assertEquals(
+ "Column mapping", true, reader.getAnnotation( AttributeOverrides.class
).value()[1].column().unique()
+ );
+ assertNotNull( reader.getAnnotation( AssociationOverrides.class ) );
+ assertEquals( "no XML processing", 1, reader.getAnnotation(
AssociationOverrides.class ).value().length );
+ assertEquals(
+ "wrong xml processing", "id",
+ reader.getAnnotation( AssociationOverrides.class
).value()[0].joinColumns()[0].referencedColumnName()
+ );
+
+
+ reader = new EJB3OverridenAnnotationReader( SocialSecurityPhysicalAccount.class,
context );
+ assertNotNull( reader.getAnnotation( IdClass.class ) );
+ assertEquals( "id-class not used", SocialSecurityNumber.class,
reader.getAnnotation( IdClass.class ).value() );
+ assertEquals(
+ "discriminator-value not used", "Physical", reader.getAnnotation(
DiscriminatorValue.class ).value()
+ );
+ assertNotNull( "discriminator-column not used", reader.getAnnotation(
DiscriminatorColumn.class ) );
+ assertEquals(
+ "discriminator-column.name default value broken", "DTYPE",
+ reader.getAnnotation( DiscriminatorColumn.class ).name()
+ );
+ assertEquals(
+ "discriminator-column.length broken", 34, reader.getAnnotation(
DiscriminatorColumn.class ).length()
+ );
+ }
+
+ public void testEntityRelatedAnnotationsMetadataComplete() throws Exception {
+ XMLContext context = buildContext(
+ "org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader(
Administration.class, context );
+ assertNotNull( reader.getAnnotation( Entity.class ) );
+ assertEquals(
+ "Metadata complete should ignore java annotations", "",
reader.getAnnotation( Entity.class ).name()
+ );
+ assertNotNull( reader.getAnnotation( Table.class ) );
+ assertEquals( "@Table should not be used", "",
reader.getAnnotation( Table.class ).name() );
+ assertEquals( "Default schema not overriden", "myschema",
reader.getAnnotation( Table.class ).schema() );
+
+ reader = new EJB3OverridenAnnotationReader( Match.class, context );
+ assertNotNull( reader.getAnnotation( Table.class ) );
+ assertEquals( "@Table should not be used", "",
reader.getAnnotation( Table.class ).name() );
+ assertEquals( "Overriding not taken into account", "myschema",
reader.getAnnotation( Table.class ).schema() );
+ assertEquals( "Overriding not taken into account", "mycatalog",
reader.getAnnotation( Table.class ).catalog() );
+ assertNull( "Ignore Java annotation", reader.getAnnotation(
SecondaryTable.class ) );
+ assertNull( "Ignore Java annotation", reader.getAnnotation(
SecondaryTables.class ) );
+ assertNull( "Ignore Java annotation", reader.getAnnotation( Inheritance.class
) );
+ assertNull( reader.getAnnotation( NamedQueries.class ) );
+ assertNull( reader.getAnnotation( NamedNativeQueries.class ) );
+
+ reader = new EJB3OverridenAnnotationReader( TennisMatch.class, context );
+ assertNull( reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
+ assertNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
+
+ reader = new EJB3OverridenAnnotationReader( Competition.class, context );
+ assertNull( reader.getAnnotation( MappedSuperclass.class ) );
+
+ reader = new EJB3OverridenAnnotationReader( SocialSecurityMoralAccount.class, context
);
+ assertNull( reader.getAnnotation( IdClass.class ) );
+ assertNull( reader.getAnnotation( DiscriminatorValue.class ) );
+ assertNull( reader.getAnnotation( DiscriminatorColumn.class ) );
+ assertNull( reader.getAnnotation( SequenceGenerator.class ) );
+ assertNull( reader.getAnnotation( TableGenerator.class ) );
+ }
+
+ public void testIdRelatedAnnotations() throws Exception {
+ XMLContext context = buildContext(
"org/hibernate/test/annotations/reflection/orm.xml" );
+ Method method = Administration.class.getDeclaredMethod( "getId" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method,
context );
+ assertNull( reader.getAnnotation( Id.class ) );
+ assertNull( reader.getAnnotation( Column.class ) );
+ Field field = Administration.class.getDeclaredField( "id" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( Id.class ) );
+ assertNotNull( reader.getAnnotation( GeneratedValue.class ) );
+ assertEquals( GenerationType.SEQUENCE, reader.getAnnotation( GeneratedValue.class
).strategy() );
+ assertEquals( "generator", reader.getAnnotation( GeneratedValue.class
).generator() );
+ assertNotNull( reader.getAnnotation( SequenceGenerator.class ) );
+ assertEquals( "seq", reader.getAnnotation( SequenceGenerator.class
).sequenceName() );
+ assertNotNull( reader.getAnnotation( Columns.class ) );
+ assertEquals( 1, reader.getAnnotation( Columns.class ).columns().length );
+ assertEquals( "fld_id", reader.getAnnotation( Columns.class
).columns()[0].name() );
+ assertNotNull( reader.getAnnotation( Temporal.class ) );
+ assertEquals( TemporalType.DATE, reader.getAnnotation( Temporal.class ).value() );
+
+ context = buildContext(
+ "org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+ method = Administration.class.getDeclaredMethod( "getId" );
+ reader = new EJB3OverridenAnnotationReader( method, context );
+ assertNotNull(
+ "Default access type when not defined in metadata complete should be
property",
+ reader.getAnnotation( Id.class )
+ );
+ field = Administration.class.getDeclaredField( "id" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNull(
+ "Default access type when not defined in metadata complete should be
property",
+ reader.getAnnotation( Id.class )
+ );
+
+ method = BusTrip.class.getDeclaredMethod( "getId" );
+ reader = new EJB3OverridenAnnotationReader( method, context );
+ assertNull( reader.getAnnotation( EmbeddedId.class ) );
+ field = BusTrip.class.getDeclaredField( "id" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( EmbeddedId.class ) );
+ assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
+ assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length );
+ }
+
+ public void testBasicRelatedAnnotations() throws Exception {
+ XMLContext context = buildContext(
+ "org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+ Field field = BusTrip.class.getDeclaredField( "status" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field,
context );
+ assertNotNull( reader.getAnnotation( Enumerated.class ) );
+ assertEquals( EnumType.STRING, reader.getAnnotation( Enumerated.class ).value() );
+ assertEquals( false, reader.getAnnotation( Basic.class ).optional() );
+ field = BusTrip.class.getDeclaredField( "serial" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( Lob.class ) );
+ assertEquals( "serialbytes", reader.getAnnotation( Columns.class
).columns()[0].name() );
+ field = BusTrip.class.getDeclaredField( "terminusTime" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( Temporal.class ) );
+ assertEquals( TemporalType.TIMESTAMP, reader.getAnnotation( Temporal.class ).value()
);
+ assertEquals( FetchType.LAZY, reader.getAnnotation( Basic.class ).fetch() );
+
+ field = BusTripPk.class.getDeclaredField( "busDriver" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.isAnnotationPresent( Basic.class ) );
+ }
+
+ public void testVersionRelatedAnnotations() throws Exception {
+ XMLContext context = buildContext(
"org/hibernate/test/annotations/reflection/orm.xml" );
+ Method method = Administration.class.getDeclaredMethod( "getVersion" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method,
context );
+ assertNotNull( reader.getAnnotation( Version.class ) );
+
+ Field field = Match.class.getDeclaredField( "version" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( Version.class ) );
+ }
+
+ public void testTransientAndEmbeddedRelatedAnnotations() throws Exception {
+ XMLContext context = buildContext(
"org/hibernate/test/annotations/reflection/orm.xml" );
+
+ Field field = Administration.class.getDeclaredField( "transientField" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field,
context );
+ assertNotNull( reader.getAnnotation( Transient.class ) );
+ assertNull( reader.getAnnotation( Basic.class ) );
+
+ field = Match.class.getDeclaredField( "playerASSN" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( Embedded.class ) );
+ }
+
+ public void testAssociationRelatedAnnotations() throws Exception {
+ XMLContext context = buildContext(
"org/hibernate/test/annotations/reflection/orm.xml" );
+
+ Field field = Administration.class.getDeclaredField( "defaultBusTrip" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field,
context );
+ assertNotNull( reader.getAnnotation( OneToOne.class ) );
+ assertNull( reader.getAnnotation( JoinColumns.class ) );
+ assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
+ assertEquals( "pk", reader.getAnnotation( PrimaryKeyJoinColumns.class
).value()[0].name() );
+ assertEquals( 5, reader.getAnnotation( OneToOne.class ).cascade().length );
+ assertEquals( FetchType.LAZY, reader.getAnnotation( OneToOne.class ).fetch() );
+ assertEquals( "test", reader.getAnnotation( OneToOne.class ).mappedBy() );
+
+ context = buildContext(
+ "org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+ field = BusTrip.class.getDeclaredField( "players" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( OneToMany.class ) );
+ assertNotNull( reader.getAnnotation( JoinColumns.class ) );
+ assertEquals( 2, reader.getAnnotation( JoinColumns.class ).value().length );
+ assertEquals( "driver", reader.getAnnotation( JoinColumns.class
).value()[0].name() );
+ assertNotNull( reader.getAnnotation( MapKey.class ) );
+ assertEquals( "name", reader.getAnnotation( MapKey.class ).name() );
+
+ field = BusTrip.class.getDeclaredField( "roads" );
+ reader = new EJB3OverridenAnnotationReader( field, context );
+ assertNotNull( reader.getAnnotation( ManyToMany.class ) );
+ assertNotNull( reader.getAnnotation( JoinTable.class ) );
+ assertEquals( "bus_road", reader.getAnnotation( JoinTable.class ).name() );
+ assertEquals( 2, reader.getAnnotation( JoinTable.class ).joinColumns().length );
+ assertEquals( 1, reader.getAnnotation( JoinTable.class ).inverseJoinColumns().length
);
+ assertEquals( 2, reader.getAnnotation( JoinTable.class
).uniqueConstraints()[0].columnNames().length );
+ assertNotNull( reader.getAnnotation( OrderBy.class ) );
+ assertEquals( "maxSpeed", reader.getAnnotation( OrderBy.class ).value() );
+ }
+
+ public void testEntityListeners() throws Exception {
+ XMLContext context = buildContext(
"org/hibernate/test/annotations/reflection/orm.xml" );
+
+ Method method = Administration.class.getDeclaredMethod( "calculate" );
+ EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method,
context );
+ assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
+
+ reader = new EJB3OverridenAnnotationReader( Administration.class, context );
+ assertTrue( reader.isAnnotationPresent( EntityListeners.class ) );
+ assertEquals( 1, reader.getAnnotation( EntityListeners.class ).value().length );
+ assertEquals( LogListener.class, reader.getAnnotation( EntityListeners.class
).value()[0] );
+
+ method = LogListener.class.getDeclaredMethod( "noLog", Object.class );
+ reader = new EJB3OverridenAnnotationReader( method, context );
+ assertTrue( reader.isAnnotationPresent( PostLoad.class ) );
+
+ method = LogListener.class.getDeclaredMethod( "log", Object.class );
+ reader = new EJB3OverridenAnnotationReader( method, context );
+ assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
+ assertFalse( reader.isAnnotationPresent( PostPersist.class ) );
+
+ assertEquals( 1, context.getDefaultEntityListeners().size() );
+ assertEquals( OtherLogListener.class.getName(),
context.getDefaultEntityListeners().get(0) );
+ }
+
+ private XMLContext buildContext(String ormfile) throws SAXException, DocumentException,
IOException {
+ XMLHelper xmlHelper = new XMLHelper();
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ InputStream is = cl.getResourceAsStream( ormfile );
+ assertNotNull( "ORM.xml not found: " + ormfile, is );
+ XMLContext context = new XMLContext();
+ List errors = new ArrayList();
+ SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors,
EJB3DTDEntityResolver.INSTANCE );
+ //saxReader.setValidation( false );
+ try {
+ saxReader.setFeature( "http://apache.org/xml/features/validation/schema",
true );
+ }
+ catch (SAXNotSupportedException e) {
+ saxReader.setValidation( false );
+ }
+ org.dom4j.Document doc;
+ try {
+ doc = saxReader
+ .read( new InputSource( new BufferedInputStream( is ) ) );
+ }
+ finally {
+ is.close();
+ }
+ if (errors.size() > 0) {
+ System.out.println( errors.get( 0 ) );
+ }
+ assertEquals( 0, errors.size() );
+ context.addDocument( doc );
+ return context;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/LogListener.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/LogListener.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/LogListener.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: LogListener.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.PrePersist;
+import javax.persistence.PostPersist;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LogListener {
+ private final Logger log = LoggerFactory.getLogger( LogListener.class );
+
+ @PrePersist
+ @PostPersist
+ public void log(Object entity) {
+ log.debug( "Logging entity {} with hashCode: {}",
entity.getClass().getName(), entity.hashCode() );
+ }
+
+
+ public void noLog(Object entity) {
+ log.debug( "NoLogging entity {} with hashCode: {}",
entity.getClass().getName(), entity.hashCode() );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Match.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Match.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Match.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Match.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+import javax.persistence.Version;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(name = "matchtable", schema = "matchschema")
+@SecondaryTable(name = "extendedMatch")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+@NamedQueries({
+@NamedQuery(name = "matchbyid", query = "select m from Match m where m.id
= :id"),
+@NamedQuery(name = "getAllMatches2", query = "select m from Match
m")
+ })
+@NamedNativeQueries({
+@NamedNativeQuery(name = "matchbyid", query = "select m from Match m where
m.id = :id", resultSetMapping = "matchrs"),
+@NamedNativeQuery(name = "getAllMatches2", query = "select m from Match
m", resultSetMapping = "matchrs")
+ })
+public class Match extends Competition {
+ public String competitor1Point;
+ @Version
+ public Integer version;
+ public SocialSecurityNumber playerASSN;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Organization.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Organization.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/Organization.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$Id: Organization.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Organization {
+ private String organizationId;
+
+ public String getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(String organizationId) {
+ this.organizationId = organizationId;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/OtherLogListener.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/OtherLogListener.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/OtherLogListener.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,27 @@
+//$Id: OtherLogListener.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.PrePersist;
+import javax.persistence.PostPersist;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OtherLogListener {
+ private final Logger log = LoggerFactory.getLogger( OtherLogListener.class );
+
+ @PrePersist
+ @PostPersist
+ public void log(Object entity) {
+ log.debug( "Logging entity {} with hashCode: {}",
entity.getClass().getName(), entity.hashCode() );
+ }
+
+
+ public void noLog(Object entity) {
+ log.debug( "NoLogging entity {} with hashCode: {}",
entity.getClass().getName(), entity.hashCode() );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: SocialSecurityMoralAccount.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.IdClass;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.TableGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(SocialSecurityNumber.class)
+@DiscriminatorValue("Moral")
+@SequenceGenerator(name = "seq")
+@TableGenerator(name = "table")
+public class SocialSecurityMoralAccount {
+ public String number;
+ public String countryCode;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,33 @@
+//$Id: SocialSecurityNumber.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class SocialSecurityNumber implements Serializable {
+ public String number;
+ public String countryCode;
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final SocialSecurityNumber that = (SocialSecurityNumber) o;
+
+ if ( !countryCode.equals( that.countryCode ) ) return false;
+ if ( !number.equals( that.number ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = number.hashCode();
+ result = 29 * result + countryCode.hashCode();
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+//$Id: SocialSecurityPhysicalAccount.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class SocialSecurityPhysicalAccount {
+ public String number;
+ public String countryCode;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/TennisMatch.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/TennisMatch.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/TennisMatch.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,21 @@
+//$Id: TennisMatch.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@PrimaryKeyJoinColumn(name = "match_id")
+@AttributeOverrides(
+ {@AttributeOverride(name = "net", column = @Column(name = "net")),
+ @AttributeOverride(name = "line", column = @Column(name = "line"))
+ })
+public class TennisMatch {
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/XMLContextTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/XMLContextTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/XMLContextTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: XMLContextTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.reflection;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+import org.dom4j.io.SAXReader;
+import org.hibernate.cfg.EJB3DTDEntityResolver;
+import org.hibernate.cfg.annotations.reflection.XMLContext;
+import org.hibernate.util.XMLHelper;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXNotSupportedException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class XMLContextTest extends TestCase {
+ public void testAll() throws Exception {
+ XMLHelper xmlHelper = new XMLHelper();
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ InputStream is = cl.getResourceAsStream(
+ "org/hibernate/test/annotations/reflection/orm.xml" );
+ assertNotNull( "ORM.xml not found", is );
+ XMLContext context = new XMLContext();
+ List errors = new ArrayList();
+ SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors,
EJB3DTDEntityResolver.INSTANCE );
+ //saxReader.setValidation( false );
+ try {
+ saxReader.setFeature( "http://apache.org/xml/features/validation/schema",
true );
+ }
+ catch (SAXNotSupportedException e) {
+ saxReader.setValidation( false );
+ }
+ org.dom4j.Document doc;
+ try {
+ doc = saxReader
+ .read( new InputSource( new BufferedInputStream( is ) ) );
+ }
+ finally {
+ try {
+ is.close();
+ }
+ catch (IOException ioe) {
+ //log.warn( "Could not close input stream", ioe );
+ }
+ }
+ assertEquals( 0, errors.size() );
+ context.addDocument( doc );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/metadata-complete.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/metadata-complete.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/metadata-complete.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_1_0.xsd"
+ version="1.0"
+ >
+ <persistence-unit-metadata>
+ <xml-mapping-metadata-complete/>
+ <persistence-unit-defaults>
+ <schema>myschema</schema>
+ <catalog>mycatalog</catalog>
+ <cascade-persist/>
+ </persistence-unit-defaults>
+ </persistence-unit-metadata>
+ <package>org.hibernate.test.annotations.reflection</package>
+ <mapped-superclass class="Organization">
+ <attributes>
+ <basic name="organizationId"/>
+ </attributes>
+ </mapped-superclass>
+ <entity class="Administration">
+ <attributes>
+ <id name="id"/>
+ </attributes>
+ </entity>
+ <entity class="Match">
+ </entity>
+ <entity class="SocialSecurityMoralAccount"/>
+ <entity class="BusTrip" access="FIELD">
+ <attributes>
+ <embedded-id name="id">
+ <attribute-override name="busDriver">
+ <column name="fld_busdriver"/>
+ </attribute-override>
+ </embedded-id>
+ <basic name="status" optional="false">
+ <enumerated>STRING</enumerated>
+ </basic>
+ <basic name="serial" optional="true">
+ <column name="serialbytes"/>
+ <lob/>
+ </basic>
+ <basic name="terminusTime" fetch="LAZY">
+ <temporal>TIMESTAMP</temporal>
+ </basic>
+ <one-to-many name="players">
+ <map-key name="name"/>
+ <join-column name="driver"/>
+ <join-column name="number"/>
+ </one-to-many>
+ <many-to-many name="roads"
target-entity="Administration">
+ <order-by>maxSpeed</order-by>
+ <join-table name="bus_road">
+ <join-column name="driver"/>
+ <join-column name="number"/>
+ <inverse-join-column name="road_id"/>
+ <unique-constraint>
+ <column-name>driver</column-name>
+ <column-name>number</column-name>
+ </unique-constraint>
+ </join-table>
+ </many-to-many>
+ </attributes>
+ </entity>
+ <embeddable class="BusTripPk" access="FIELD">
+ <attributes>
+ <basic name="busDriver">
+ <column name="busdriver"/>
+ </basic>
+ <basic name="busNumber">
+ <column name="busnumber"/>
+ </basic>
+ </attributes>
+ </embeddable>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/orm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/orm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/reflection/orm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_1_0.xsd"
+ version="1.0"
+ >
+ <persistence-unit-metadata>
+ <persistence-unit-defaults>
+ <schema>myschema</schema>
+ <catalog>mycatalog</catalog>
+ <cascade-persist/>
+ <entity-listeners>
+ <entity-listener
class="org.hibernate.test.annotations.reflection.OtherLogListener">
+ <post-update method-name="log"/>
+ </entity-listener>
+ </entity-listeners>
+ </persistence-unit-defaults>
+ </persistence-unit-metadata>
+ <package>org.hibernate.test.annotations.reflection</package>
+ <entity class="Administration">
+ <table name="tbl_admin">
+ <unique-constraint>
+ <column-name>firstname</column-name>
+ <column-name>lastname</column-name>
+ </unique-constraint>
+ </table>
+ <secondary-table name="admin2">
+ <primary-key-join-column name="admin_id"
referenced-column-name="id"/>
+ <unique-constraint>
+ <column-name>address</column-name>
+ </unique-constraint>
+ </secondary-table>
+ <sequence-generator name="seqhilo"
sequence-name="seqhilo"/>
+ <table-generator name="table" table="tablehilo"/>
+ <entity-listeners>
+ <entity-listener class="LogListener">
+ <pre-persist method-name="log"/>
+ <post-load method-name="noLog"/>
+ </entity-listener>
+ </entity-listeners>
+ <pre-persist method-name="calculate"/>
+ <attributes>
+ <id name="id">
+ <column name="fld_id"/>
+ <generated-value generator="generator"
strategy="SEQUENCE"/>
+ <temporal>DATE</temporal>
+ <sequence-generator name="generator"
sequence-name="seq"/>
+ </id>
+ <version name="version"/>
+ <one-to-one name="defaultBusTrip" fetch="LAZY"
mapped-by="test">
+ <primary-key-join-column name="pk"/>
+ <cascade>
+ <cascade-all/>
+ <cascade-persist/>
+ <cascade-merge/>
+ <cascade-remove/>
+ <cascade-refresh/>
+ </cascade>
+ </one-to-one>
+ <transient name="transientField"/>
+ </attributes>
+ </entity>
+ <entity class="Match">
+ <inheritance strategy="JOINED"/>
+ <named-query name="allmatches">
+ <query>select m from Match m</query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="matchbyid">
+ <query>select m from Match m where m.id = :id</query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-native-query name="allmatches"
result-set-mapping="matchrs">
+ <query>select m from Match m</query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-native-query>
+ <named-native-query name="matchbyid"
result-set-mapping="matchrs">
+ <query>select m from Match m where m.id = :id</query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-native-query>
+ <sql-result-set-mapping name="matchrs">
+ <entity-result
entity-class="org.hibernate.test.annotations.reflection.Match">
+ <field-result name="competitor1Point"
column="competitor1Point"/>
+ </entity-result>
+ <column-result name="competitor1Point"/>
+ </sql-result-set-mapping>
+ <exclude-default-listeners/>
+ <exclude-superclass-listeners/>
+ <entity-listeners>
+ <entity-listener class="LogListener">
+ <pre-persist method-name="log"/>
+ <post-load method-name="noLog"/>
+ </entity-listener>
+ </entity-listeners>
+ <attributes>
+ <embedded name="playerASSN"/>
+ </attributes>
+ </entity>
+ <entity class="TennisMatch">
+ <primary-key-join-column name="id"/>
+ <attribute-override name="net">
+ <column name="fld_net"/>
+ </attribute-override>
+ <attribute-override name="ground">
+ <column name="fld_ground" unique="true"
scale="2"/>
+ </attribute-override>
+ <association-override name="referer">
+ <join-column name="referer_id"
referenced-column-name="id"/>
+ </association-override>
+ </entity>
+ <entity class="SocialSecurityPhysicalAccount">
+ <id-class
class="org.hibernate.test.annotations.reflection.SocialSecurityNumber"/>
+ <discriminator-value>Physical</discriminator-value>
+ <discriminator-column length="34"/>
+ </entity>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Location.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Location.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Location.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: Location.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.strategy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Location {
+ private String city;
+ private String country;
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Storm.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Storm.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/Storm.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,62 @@
+//$Id: Storm.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.strategy;
+
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.UniqueConstraint;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"start.country",
"start.city"})})
+public class Storm {
+ private Integer id;
+ private Location start;
+ private Location end;
+ private String stormName;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Embedded
+ public Location getStart() {
+ return start;
+ }
+
+ public void setStart(Location start) {
+ this.start = start;
+ }
+
+ @Embedded
+ public Location getEnd() {
+ return end;
+ }
+
+ public void setEnd(Location end) {
+ this.end = end;
+ }
+
+ @Index(name="storm_name_idx")
+ @Column(unique = true)
+ public String getStormName() {
+ return stormName;
+ }
+
+ public void setStormName(String name) {
+ this.stormName = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/StrategyTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/StrategyTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/strategy/StrategyTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,44 @@
+//$Id: StrategyTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.strategy;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.DefaultComponentSafeNamingStrategy;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StrategyTest extends TestCase {
+
+ public void testComponentSafeStrategy() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Location start = new Location();
+ start.setCity( "Paris" );
+ start.setCountry( "France" );
+ Location end = new Location();
+ end.setCity( "London" );
+ end.setCountry( "UK" );
+ Storm storm = new Storm();
+ storm.setEnd( end );
+ storm.setStart( start );
+ s.persist( storm );
+ s.flush();
+ tx.rollback();
+ s.close();
+ }
+
+ protected void configure(Configuration cfg) {
+ cfg.setNamingStrategy( DefaultComponentSafeNamingStrategy.INSTANCE );
+ //cfg.getSessionEventListenerConfig().setFlushEventListener( new
EJB3FlushEventListener() );
+ //cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new
EJB3AutoFlushEventListener() );
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Storm.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Component.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Component.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Component.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,53 @@
+//$Id: Component.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity(name = "xpmComponent")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public abstract class Component {
+ private String manufacturerPartNumber;
+ private Long manufacturerId;
+ private Long id;
+
+
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+
+ @Id
+ public Long getId() {
+ return id;
+ }
+
+ @Column(nullable = false)
+ @Index(name = "manufacturerPartNumber")
+ public String getManufacturerPartNumber() {
+ return manufacturerPartNumber;
+ }
+
+ @Column(nullable = false)
+ public Long getManufacturerId() {
+ return manufacturerId;
+ }
+
+ public void setManufacturerId(Long manufacturerId) {
+ this.manufacturerId = manufacturerId;
+ }
+
+
+ public void setManufacturerPartNumber(String manufacturerPartNumber) {
+ this.manufacturerPartNumber = manufacturerPartNumber;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Machine.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Machine.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Machine.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,37 @@
+//$Id: Machine.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Machine {
+ private Integer id;
+ private Double weight;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE)
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Double getWeight() {
+ return weight;
+ }
+
+ public void setWeight(Double weight) {
+ this.weight = weight;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Product.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Product.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Product.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,15 @@
+//$Id: Product.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Table( name = "xPM_Product", uniqueConstraints = {@UniqueConstraint(
columnNames = {
+ "manufacturerPartNumber", "manufacturerId"} )} )
+public class Product extends Component {
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Robot.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Robot.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/Robot.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: Robot.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Robot extends Machine {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/T800.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/T800.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/T800.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: T800.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class T800 extends Robot {
+ public String getTargetName() {
+ return targetName;
+ }
+
+ public void setTargetName(String targetName) {
+ this.targetName = targetName;
+ }
+
+ private String targetName;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,90 @@
+//$Id: TablePerClassTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tableperclass;
+
+import java.util.List;
+import java.sql.SQLException;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.JDBCException;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TablePerClassTest extends TestCase {
+ public void testUnionSubClass() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Machine computer = new Machine();
+ computer.setWeight( new Double( 4 ) );
+ Robot asimov = new Robot();
+ asimov.setWeight( new Double( 120 ) );
+ asimov.setName( "Asimov" );
+ T800 terminator = new T800();
+ terminator.setName( "Terminator" );
+ terminator.setWeight( new Double( 300 ) );
+ terminator.setTargetName( "Sarah Connor" );
+ s.persist( computer );
+ s.persist( asimov );
+ s.persist( terminator );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ Query q = s.createQuery( "from Machine m where m.weight >= :weight" );
+ q.setDouble( "weight", new Double( 10 ) );
+ List result = q.list();
+ assertEquals( 2, result.size() );
+ tx.commit();
+ s.close();
+ s = openSession();
+ tx = s.beginTransaction();
+ tx.commit();
+ s.close();
+ }
+
+ public void testConstraintsOnSuperclassProperties() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Product product1 = new Product();
+ product1.setId( 1l );
+ product1.setManufacturerId( 1l );
+ product1.setManufacturerPartNumber( "AAFR");
+ s.persist( product1 );
+ s.flush();
+ Product product2 = new Product();
+ product2.setId( 2l );
+ product2.setManufacturerId( 1l );
+ product2.setManufacturerPartNumber( "AAFR");
+ s.persist( product2 );
+ try {
+ s.flush();
+ fail("Database Exception not handled");
+ }
+ catch( JDBCException e ) {
+ //success
+ }
+ tx.rollback();
+ s.close();
+ }
+
+
+
+ public TablePerClassTest(String x) {
+ super( x ); //To change body of overridden methods use File | Settings | File
Templates.
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Robot.class,
+ T800.class,
+ Machine.class,
+ Component.class,
+ Product.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Brand.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Brand.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Brand.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+//$Id: Brand.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.MapKeyManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Brand {
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ @ManyToMany(targetEntity = LuggageImpl.class)
+ @MapKey(targetElement = SizeImpl.class)
+ private Map<Size, Luggage> luggagesBySize = new HashMap<Size, Luggage>();
+
+ @CollectionOfElements(targetElement = SizeImpl.class)
+ @MapKeyManyToMany(targetEntity = LuggageImpl.class)
+ private Map<Luggage, Size> sizePerLuggage = new HashMap<Luggage, Size>();
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Map<Size, Luggage> getLuggagesBySize() {
+ return luggagesBySize;
+ }
+
+ public void setLuggagesBySize(Map<Size, Luggage> luggagesBySize) {
+ this.luggagesBySize = luggagesBySize;
+ }
+
+ public Map<Luggage, Size> getSizePerLuggage() {
+ return sizePerLuggage;
+ }
+
+ public void setSizePerLuggage(Map<Luggage, Size> sizePerLuggage) {
+ this.sizePerLuggage = sizePerLuggage;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Luggage.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Luggage.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Luggage.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+//$Id: Luggage.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Luggage {
+ double getHeight();
+ double getWidth();
+
+ void setHeight(double height);
+ void setWidth(double width);
+
+ Owner getOwner();
+
+ void setOwner(Owner owner);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/LuggageImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/LuggageImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/LuggageImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+//$Id: LuggageImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.Embedded;
+
+import org.hibernate.annotations.Target;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class LuggageImpl implements Luggage {
+ private Long id;
+ private double height;
+ private double width;
+ private Owner owner;
+
+ @Embedded
+ @Target(OwnerImpl.class)
+ public Owner getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Owner owner) {
+ this.owner = owner;
+ }
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public double getHeight() {
+ return height;
+ }
+
+ public void setHeight(double height) {
+ this.height = height;
+ }
+
+ public double getWidth() {
+ return width;
+ }
+
+ public void setWidth(double width) {
+ this.width = width;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Owner.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Owner.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Owner.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+//$Id: Owner.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+import java.util.Map;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Owner {
+ String getName();
+ void setName(String name);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,24 @@
+//$Id: OwnerImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.Embeddable;
+import org.hibernate.annotations.MapKey;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class OwnerImpl implements Owner {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Size.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Size.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/Size.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+//$Id: Size.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Size {
+ String getName();
+ void setName(String name);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/SizeImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/SizeImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/SizeImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,20 @@
+//$Id: SizeImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class SizeImpl implements Size {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/TargetTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/TargetTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/target/TargetTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,82 @@
+//$Id: TargetTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.target;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TargetTest extends TestCase {
+
+ public void testTargetOnEmbedded() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Luggage l = new LuggageImpl();
+ l.setHeight( 12 );
+ l.setWidth( 12 );
+ Owner o = new OwnerImpl();
+ o.setName( "Emmanuel" );
+ l.setOwner( o );
+ s.persist( l );
+ s.flush();
+ s.clear();
+ l = (Luggage) s.get(LuggageImpl.class, ( (LuggageImpl) l).getId() );
+ assertEquals( "Emmanuel", l.getOwner().getName() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testTargetOnMapKey() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Luggage l = new LuggageImpl();
+ l.setHeight( 12 );
+ l.setWidth( 12 );
+ Size size = new SizeImpl();
+ size.setName( "S" );
+ Owner o = new OwnerImpl();
+ o.setName( "Emmanuel" );
+ l.setOwner( o );
+ s.persist( l );
+ Brand b = new Brand();
+ s.persist( b );
+ b.getLuggagesBySize().put( size, l );
+ s.flush();
+ s.clear();
+ b = (Brand) s.get(Brand.class, b.getId() );
+ assertEquals( "S", b.getLuggagesBySize().keySet().iterator().next().getName()
);
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testTargetOnMapKeyManyToMany() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Luggage l = new LuggageImpl();
+ l.setHeight( 12 );
+ l.setWidth( 12 );
+ Size size = new SizeImpl();
+ size.setName( "S" );
+ Owner o = new OwnerImpl();
+ o.setName( "Emmanuel" );
+ l.setOwner( o );
+ s.persist( l );
+ Brand b = new Brand();
+ s.persist( b );
+ b.getSizePerLuggage().put( l, size );
+ s.flush();
+ s.clear();
+ b = (Brand) s.get(Brand.class, b.getId() );
+ assertEquals( 12d, b.getSizePerLuggage().keySet().iterator().next().getWidth() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ LuggageImpl.class,
+ Brand.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Country.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Country.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Country.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,15 @@
+//$Id: Country.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import javax.persistence.Embeddable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public interface Country {
+ @Column(name = "CountryName")
+ public String getName();
+ public void setName(String name);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Cuisine.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Cuisine.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/Cuisine.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: Cuisine.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.Tuplizer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Tuplizer(impl = DynamicEntityTuplizer.class)
+public interface Cuisine {
+ @Id
+ @GeneratedValue
+ public Long getId();
+ public void setId(Long id);
+
+ public String getName();
+ public void setName(String name);
+
+ @Tuplizer(impl = DynamicComponentTuplizer.class)
+ public Country getCountry();
+ public void setCountry(Country country);
+
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,53 @@
+//$Id: DataProxyHandler.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.io.Serializable;
+
+/**
+ * A simple {@link java.lang.reflect.InvocationHandler} to act as the handler for our
generated
+ * {@link java.lang.reflect.Proxy}-based entity instances.
+ * <p/>
+ * This is a trivial impl which simply keeps the property values into
+ * a Map.
+ *
+ * @author <a href="mailto:steve@hibernate.org">Steve Ebersole
</a>
+ */
+public final class DataProxyHandler implements InvocationHandler {
+ private String entityName;
+ private HashMap data = new HashMap();
+
+ public DataProxyHandler(String entityName, Serializable id) {
+ this.entityName = entityName;
+ data.put( "Id", id );
+ }
+
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ String methodName = method.getName();
+ if ( methodName.startsWith( "set" ) ) {
+ String propertyName = methodName.substring( 3 );
+ data.put( propertyName, args[0] );
+ }
+ else if ( methodName.startsWith( "get" ) ) {
+ String propertyName = methodName.substring( 3 );
+ return data.get( propertyName );
+ }
+ else if ( "toString".equals( methodName ) ) {
+ return entityName + "#" + data.get( "Id" );
+ }
+ else if ( "hashCode".equals( methodName ) ) {
+ return new Integer( this.hashCode() );
+ }
+ return null;
+ }
+
+ public String getEntityName() {
+ return entityName;
+ }
+
+ public HashMap getData() {
+ return data;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,29 @@
+//$Id: DynamicComponentTuplizer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.tuple.entity.PojoEntityTuplizer;
+import org.hibernate.tuple.entity.EntityMetamodel;
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.tuple.component.PojoComponentTuplizer;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Component;
+import org.hibernate.proxy.ProxyFactory;
+import org.hibernate.property.Getter;
+import org.hibernate.property.Setter;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DynamicComponentTuplizer extends PojoComponentTuplizer {
+
+ public DynamicComponentTuplizer(Component component) {
+ super( component );
+ }
+
+
+ protected Instantiator buildInstantiator(Component component) {
+ return new DynamicInstantiator( component.getComponentClassName() ); //To change body
of overridden methods use File | Settings | File Templates.
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,32 @@
+//$Id: DynamicEntityTuplizer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.tuple.entity.PojoEntityTuplizer;
+import org.hibernate.tuple.entity.EntityMetamodel;
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.proxy.ProxyFactory;
+import org.hibernate.property.Getter;
+import org.hibernate.property.Setter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DynamicEntityTuplizer extends PojoEntityTuplizer {
+
+ public DynamicEntityTuplizer(EntityMetamodel entityMetamodel, PersistentClass
mappedEntity) {
+ super( entityMetamodel, mappedEntity );
+ }
+
+ protected Instantiator buildInstantiator(PersistentClass persistentClass) {
+ return new DynamicInstantiator( persistentClass.getEntityName() );
+ }
+
+ protected ProxyFactory buildProxyFactory(PersistentClass persistentClass, Getter
idGetter, Setter idSetter) {
+ // allows defining a custom proxy factory, which is responsible for
+ // generating lazy proxies for a given entity.
+ //
+ // Here we simply use the default...
+ return super.buildProxyFactory( persistentClass, idGetter, idSetter );
+ }
+ }
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+//$Id: DynamicInstantiator.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import java.io.Serializable;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.InvocationHandler;
+
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DynamicInstantiator implements Instantiator {
+ private final String entityName;
+
+ public DynamicInstantiator(String entityName) {
+ this.entityName = entityName;
+ }
+
+ public Object instantiate(Serializable id) {
+ if ( Cuisine.class.getName().equals( entityName ) ) {
+ return ProxyHelper.newCuisineProxy( id );
+ }
+ if ( Country.class.getName().equals( entityName ) ) {
+ return ProxyHelper.newCountryProxy( id );
+ }
+ else {
+ throw new IllegalArgumentException( "unknown entity for instantiation [" +
entityName + "]" );
+ }
+ }
+
+ public Object instantiate() {
+ return instantiate( null );
+ }
+
+ public boolean isInstance(Object object) {
+ String resolvedEntityName = null;
+ if ( Proxy.isProxyClass( object.getClass() ) ) {
+ InvocationHandler handler = Proxy.getInvocationHandler( object );
+ if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
+ DataProxyHandler myHandler = ( DataProxyHandler ) handler;
+ resolvedEntityName = myHandler.getEntityName();
+ }
+ }
+ try {
+ return ReflectHelper.classForName( entityName ).isInstance( object );
+ }
+ catch( Throwable t ) {
+ throw new HibernateException( "could not get handle to entity-name as interface :
" + t );
+ }
+
+// return entityName.equals( resolvedEntityName );
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: EntityNameInterceptor.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.EmptyInterceptor;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityNameInterceptor extends EmptyInterceptor {
+ /**
+ * The callback from Hibernate to determine the entity name given
+ * a presumed entity instance.
+ *
+ * @param object The presumed entity instance.
+ * @return The entity name (pointing to the proper entity mapping).
+ */
+ public String getEntityName(Object object) {
+ String entityName = ProxyHelper.extractEntityName( object );
+ if ( entityName == null ) {
+ entityName = super.getEntityName( object );
+ }
+ return entityName;
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/ProxyHelper.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/ProxyHelper.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/ProxyHelper.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,50 @@
+//$Id: ProxyHelper.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.tuplizer;
+
+import java.io.Serializable;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.InvocationHandler;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ProxyHelper {
+
+ public static Country newPersonProxy() {
+ return newCountryProxy( null );
+ }
+
+ public static Country newCountryProxy(Serializable id) {
+ return ( Country ) Proxy.newProxyInstance(
+ Country.class.getClassLoader(),
+ new Class[] {Country.class},
+ new DataProxyHandler( Country.class.getName(), id )
+ );
+ }
+
+ public static Cuisine newCustomerProxy() {
+ return newCuisineProxy( null );
+ }
+
+ public static Cuisine newCuisineProxy(Serializable id) {
+ return ( Cuisine ) Proxy.newProxyInstance(
+ Cuisine.class.getClassLoader(),
+ new Class[] {Cuisine.class},
+ new DataProxyHandler( Cuisine.class.getName(), id )
+ );
+ }
+
+ public static String extractEntityName(Object object) {
+ // Our custom java.lang.reflect.Proxy instances actually bundle
+ // their appropriate entity name, so we simply extract it from there
+ // if this represents one of our proxies; otherwise, we return null
+ if ( Proxy.isProxyClass( object.getClass() ) ) {
+ InvocationHandler handler = Proxy.getInvocationHandler( object );
+ if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
+ DataProxyHandler myHandler = ( DataProxyHandler ) handler;
+ return myHandler.getEntityName();
+ }
+ }
+ return null;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/TuplizerTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/TuplizerTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/tuplizer/TuplizerTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: TuplizerTest.java 16289 2009-04-09 22:09:50Z gbadner $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TuplizerTest extends TestCase {
+ public void testEntityTuplizer() throws Exception {
+ Cuisine cuisine = ProxyHelper.newCuisineProxy( null );
+ cuisine.setName( "Francaise" );
+ Country country = ProxyHelper.newCountryProxy( null );
+ country.setName( "France" );
+ cuisine.setCountry( country );
+ Session s = openSession( new EntityNameInterceptor() );
+ s.getTransaction().begin();
+ s.persist( cuisine );
+ s.flush();
+ s.clear();
+ cuisine = (Cuisine) s.get(Cuisine.class, cuisine.getId() );
+ assertNotNull( cuisine );
+ assertEquals( "Francaise", cuisine.getName() );
+ assertEquals( "France", country.getName() );
+ s.getTransaction().rollback();
+ s.close();
+ }
+ protected Class[] getMappings() {
+ return new Class[] {
+ Cuisine.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/Dvd.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/Dvd.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/Dvd.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,48 @@
+//$Id: Dvd.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.type;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Columns;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Dvd {
+ private MyOid id;
+ private String title;
+
+ @Id
+ @GeneratedValue(generator = "custom-id")
+ @GenericGenerator(name = "custom-id", strategy =
"org.hibernate.test.annotations.type.MyOidGenerator")
+ @Type(type = "org.hibernate.test.annotations.type.MyOidType")
+ @Columns(
+ columns = {
+ @Column(name = "high"),
+ @Column(name = "middle"),
+ @Column(name = "low"),
+ @Column(name = "other")
+ }
+ )
+ public MyOid getId() {
+ return id;
+ }
+
+ public void setId(MyOid id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOid.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOid.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOid.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,79 @@
+//$Id: MyOid.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.type;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyOid implements Serializable {
+ private int high;
+ private int middle;
+ private int low;
+ private int other;
+
+ protected MyOid() {
+ }
+
+ public MyOid(int aHigh, int aMiddle, int aLow, int aOther) {
+ high = aHigh;
+ middle = aMiddle;
+ low = aLow;
+ other = aOther;
+ }
+
+ public int getHigh() {
+ return high;
+ }
+
+ public void setHigh(int aHigh) {
+ high = aHigh;
+ }
+
+ public int getMiddle() {
+ return middle;
+ }
+
+ public void setMiddle(int aMiddle) {
+ middle = aMiddle;
+ }
+
+ public int getLow() {
+ return low;
+ }
+
+ public void setLow(int aLow) {
+ low = aLow;
+ }
+
+ public int getOther() {
+ return other;
+ }
+
+ public void setOther(int aOther) {
+ other = aOther;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+
+ final MyOid myOid = (MyOid) o;
+
+ if ( high != myOid.high ) return false;
+ if ( low != myOid.low ) return false;
+ if ( middle != myOid.middle ) return false;
+ if ( other != myOid.other ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = low;
+ result = 29 * result + middle;
+ result = 29 * result + high;
+ result = 29 * result + other;
+ return result;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidGenerator.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidGenerator.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidGenerator.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,22 @@
+//$Id: MyOidGenerator.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.type;
+
+import java.io.Serializable;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.id.IdentifierGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyOidGenerator implements IdentifierGenerator {
+
+ private int counter;
+
+ public Serializable generate(SessionImplementor aSessionImplementor, Object aObject)
throws HibernateException {
+ counter++;
+ return new MyOid( 0, 0, 0, counter );
+ }
+}
+
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/MyOidType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,147 @@
+//$Id: MyOidType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.type;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.type.Type;
+import org.hibernate.usertype.CompositeUserType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyOidType implements CompositeUserType {
+
+ public static final String[] PROPERTY_NAMES = new String[]{"high",
"middle", "low", "other"};
+ public static final Type[] TYPES = new Type[]{Hibernate.INTEGER, Hibernate.INTEGER,
Hibernate.INTEGER, Hibernate.INTEGER};
+
+
+ public String[] getPropertyNames() {
+ return PROPERTY_NAMES;
+ }
+
+ public Type[] getPropertyTypes() {
+ return TYPES;
+ }
+
+ public Object getPropertyValue(Object aObject, int i) throws HibernateException {
+ MyOid dbOid = (MyOid) aObject;
+ switch ( i ) {
+ case 0:
+ return dbOid.getHigh();
+ case 1:
+ return dbOid.getMiddle();
+ case 2:
+ return dbOid.getLow();
+ case 3:
+ return dbOid.getOther();
+ default:
+ throw new HibernateException( "Unsupported property index " + i );
+ }
+
+ }
+
+ public void setPropertyValue(Object aObject, int i, Object aObject1) throws
HibernateException {
+ MyOid dbOid = (MyOid) aObject;
+ switch ( i ) {
+ case 0:
+ dbOid.setHigh( (Integer) aObject1 );
+ case 1:
+ dbOid.setMiddle( (Integer) aObject1 );
+ case 2:
+ dbOid.setLow( (Integer) aObject1 );
+ case 3:
+ dbOid.setOther( (Integer) aObject1 );
+ default:
+ throw new HibernateException( "Unsupported property index " + i );
+ }
+ }
+
+ public Class returnedClass() {
+ return MyOid.class;
+ }
+
+ public boolean equals(Object x, Object y) throws HibernateException {
+ if ( x == y ) return true;
+ if ( x == null || y == null ) return false;
+
+ MyOid oid1 = (MyOid) x;
+ MyOid oid2 = (MyOid) y;
+
+ if ( oid1.getHigh() != oid2.getHigh() ) {
+ return false;
+ }
+ if ( oid1.getMiddle() != oid2.getMiddle() ) {
+ return false;
+ }
+ if ( oid1.getLow() != oid2.getLow() ) {
+ return false;
+ }
+ return oid1.getOther() == oid2.getOther();
+
+ }
+
+ public int hashCode(Object aObject) throws HibernateException {
+ return aObject.hashCode();
+ }
+
+ public Object nullSafeGet(
+ ResultSet aResultSet, String[] names, SessionImplementor aSessionImplementor, Object
aObject
+ ) throws HibernateException, SQLException {
+ Integer highval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[0] );
+ Integer midval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[1] );
+ Integer lowval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[2] );
+ Integer other = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[3] );
+
+ return new MyOid( highval, midval, lowval, other );
+ }
+
+ public void nullSafeSet(
+ PreparedStatement aPreparedStatement, Object value, int index, SessionImplementor
aSessionImplementor
+ ) throws HibernateException, SQLException {
+ MyOid c;
+ if ( value == null ) {
+ // todo is this correct?
+ throw new HibernateException( "Oid object may not be null" );
+ }
+ else {
+ c = (MyOid) value;
+ }
+
+ Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getHigh(), index );
+ Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getMiddle(), index + 1 );
+ Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getLow(), index + 2 );
+ Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getOther(), index + 3 );
+ }
+
+ public Object deepCopy(Object aObject) throws HibernateException {
+ MyOid oldOid = (MyOid) aObject;
+
+ return new MyOid( oldOid.getHigh(), oldOid.getMiddle(), oldOid.getLow(),
oldOid.getOther() );
+ }
+
+ public boolean isMutable() {
+ return false;
+ }
+
+ public Serializable disassemble(Object value, SessionImplementor aSessionImplementor)
throws HibernateException {
+ return (Serializable) deepCopy( value );
+ }
+
+ public Object assemble(Serializable cached, SessionImplementor aSessionImplementor,
Object aObject)
+ throws HibernateException {
+ return deepCopy( cached );
+ }
+
+ public Object replace(Object original, Object target, SessionImplementor
aSessionImplementor, Object aObject2)
+ throws HibernateException {
+ // we are immutable. return original
+ return original;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/TypeTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/TypeTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/type/TypeTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,31 @@
+//$Id: TypeTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.type;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TypeTest extends TestCase {
+ public void testIdWithMulticolumns() throws Exception {
+ Session s;
+ Transaction tx;
+ s = openSession();
+ tx = s.beginTransaction();
+ Dvd lesOiseaux = new Dvd();
+ lesOiseaux.setTitle( "Les oiseaux" );
+ s.persist( lesOiseaux );
+ s.flush();
+ assertNotNull( lesOiseaux.getId() );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Dvd.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Antenna.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Antenna.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Antenna.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,25 @@
+//$Id: Antenna.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Generated;
+import org.hibernate.annotations.GenerationTime;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Antenna {
+ @Id public Integer id;
+ @Generated(GenerationTime.ALWAYS) @Column()
+ public String longitude;
+
+ @Generated(GenerationTime.INSERT) @Column(insertable = false)
+ public String latitude;
+
+ @Generated(GenerationTime.NEVER)
+ public Double power;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Conductor.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Conductor.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Conductor.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,54 @@
+//$Id: Conductor.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Version;
+
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.OptimisticLock;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Conductor {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ @Column(name = "cond_name")
+ @Index(name = "cond_name")
+ @OptimisticLock(excluded = true)
+ private String name;
+
+ @Version
+ private Long version;
+
+
+ public Long getVersion() {
+ return version;
+ }
+
+ public void setVersion(Long version) {
+ this.version = version;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/GeneratedTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/GeneratedTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/GeneratedTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,30 @@
+//$Id: GeneratedTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GeneratedTest extends TestCase {
+
+ public void testGenerated() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Antenna antenna = new Antenna();
+ antenna.id = new Integer(1);
+ s.persist( antenna );
+ assertNull( antenna.latitude );
+ assertNull( antenna.longitude );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Antenna.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/IndexTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/IndexTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/IndexTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,63 @@
+//$Id: IndexTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import java.util.Date;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IndexTest extends TestCase {
+ public void testIndexManyToOne() throws Exception {
+ //TODO find a way to test indexes???
+ Session s = openSession();
+ s.getTransaction().begin();
+ Conductor emmanuel = new Conductor();
+ emmanuel.setName( "Emmanuel" );
+ s.persist( emmanuel );
+ Vehicule tank = new Vehicule();
+ tank.setCurrentConductor( emmanuel );
+ tank.setRegistrationNumber( "324VX43" );
+ s.persist( tank );
+ s.flush();
+ s.delete( tank );
+ s.delete( emmanuel );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testIndexAndJoined() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Conductor cond = new Conductor();
+ cond.setName( "Bob" );
+ s.persist( cond );
+ ProfessionalAgreement agreement = new ProfessionalAgreement();
+ agreement.setExpirationDate( new Date() );
+ s.persist( agreement );
+ Truck truck = new Truck();
+ truck.setAgreement( agreement );
+ truck.setWeight( 20 );
+ truck.setRegistrationNumber( "2003424" );
+ truck.setYear( 2005 );
+ truck.setCurrentConductor( cond );
+ s.persist( truck );
+ s.flush();
+ s.delete( truck );
+ s.delete( agreement );
+ s.delete( cond );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ Conductor.class,
+ Vehicule.class,
+ ProfessionalAgreement.class,
+ Truck.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/ProfessionalAgreement.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/ProfessionalAgreement.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/ProfessionalAgreement.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: ProfessionalAgreement.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class ProfessionalAgreement {
+ @Id
+ @GeneratedValue
+ private Integer id;
+ private Date expirationDate;
+
+ public Date getExpirationDate() {
+ return expirationDate;
+ }
+
+ public void setExpirationDate(Date expirationDate) {
+ this.expirationDate = expirationDate;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Truck.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Truck.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Truck.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: Truck.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Truck extends Vehicule {
+ @Index(name = "weigth_idx")
+ private int weight;
+
+ @ManyToOne
+ @JoinColumn(name = "agreement_id")
+ @Index(name = "agreement_idx")
+ private ProfessionalAgreement agreement;
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+
+ public ProfessionalAgreement getAgreement() {
+ return agreement;
+ }
+
+ public void setAgreement(ProfessionalAgreement agreement) {
+ this.agreement = agreement;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Vehicule.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Vehicule.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/Vehicule.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,83 @@
+//$Id: Vehicule.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+(a)org.hibernate.annotations.Table(appliesTo = "Vehicule",
+ indexes = {
+ @Index(name = "improbableindex", columnNames = {"registration",
"Conductor_fk"}),
+ @Index(name = "secondone", columnNames = {"Conductor_fk"})
+ }
+)
+public class Vehicule {
+ @Id
+ @GeneratedValue(generator = "gen")
+ @GenericGenerator(name = "gen", strategy = "uuid")
+ private String id;
+ @Column(name = "registration")
+ private String registrationNumber;
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "Conductor_fk")
+ @Index(name = "thirdone")
+ private Conductor currentConductor;
+ @Index(name = "year_idx")
+ private Integer year;
+ @ManyToOne(optional = true)
+ @Index(name = "forthone")
+ private Conductor previousConductor;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getRegistrationNumber() {
+ return registrationNumber;
+ }
+
+ public void setRegistrationNumber(String registrationNumber) {
+ this.registrationNumber = registrationNumber;
+ }
+
+ public Conductor getCurrentConductor() {
+ return currentConductor;
+ }
+
+ public void setCurrentConductor(Conductor currentConductor) {
+ this.currentConductor = currentConductor;
+ }
+
+ public Integer getYear() {
+ return year;
+ }
+
+ public void setYear(Integer year) {
+ this.year = year;
+ }
+
+ public Conductor getPreviousConductor() {
+ return previousConductor;
+ }
+
+ public void setPreviousConductor(Conductor previousConductor) {
+ this.previousConductor = previousConductor;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/VersionTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/VersionTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/various/VersionTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,41 @@
+//$Id: VersionTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.various;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class VersionTest extends TestCase {
+
+ public void testOptimisticLockDisabled() throws Exception {
+ Conductor c = new Conductor();
+ c.setName( "Bob" );
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( c );
+ s.flush();
+
+ s.clear();
+
+ c = (Conductor) s.get( Conductor.class, c.getId() );
+ Long version = c.getVersion();
+ c.setName( "Don" );
+ s.flush();
+
+ s.clear();
+
+ c = (Conductor) s.get( Conductor.class, c.getId() );
+ assertEquals( version, c.getVersion() );
+
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Conductor.class
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/CarModel.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/CarModel.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/CarModel.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,19 @@
+//$Id: CarModel.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.ejb3;
+
+import java.util.Date;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CarModel extends Model {
+ private Date year;
+
+ public Date getYear() {
+ return year;
+ }
+
+ public void setYear(Date year) {
+ this.year = year;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,86 @@
+//$Id: Ejb3XmlTest.java 16301 2009-04-10 23:26:04Z gbadner $
+package org.hibernate.test.annotations.xml.ejb3;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Ejb3XmlTest extends TestCase {
+ public void testEjb3Xml() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ CarModel model = new CarModel();
+ model.setYear( new Date() );
+ Manufacturer manufacturer = new Manufacturer();
+ //s.persist( manufacturer );
+ model.setManufacturer( manufacturer );
+ manufacturer.getModels().add( model );
+ s.persist( model );
+ s.flush();
+ s.clear();
+
+ model.setYear( new Date() );
+ manufacturer = (Manufacturer) s.get( Manufacturer.class, manufacturer.getId() );
+ List<Model> cars = s.getNamedQuery( "allModelsPerManufacturer" )
+ .setParameter( "manufacturer", manufacturer )
+ .list();
+ assertEquals( 1, cars.size() );
+ for ( Model car : cars ) {
+ assertNotNull( car.getManufacturer() );
+ s.delete( manufacturer );
+ s.delete( car );
+ }
+ tx.rollback();
+ s.close();
+ }
+
+ public void testXMLEntityHandled() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Lighter l = new Lighter();
+ l.name = "Blue";
+ l.power = "400F";
+ s.persist( l );
+ s.flush();
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testXmlDefaultOverriding() throws Exception {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Manufacturer manufacturer = new Manufacturer();
+ s.persist( manufacturer );
+ s.flush();
+ s.clear();
+
+ assertEquals( 1, s.getNamedQuery( "manufacturer.findAll" ).list().size() );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ CarModel.class,
+ Manufacturer.class,
+ Model.class,
+ Light.class
+ //Lighter.class xml only entuty
+ };
+ }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[]{
+ "org/hibernate/test/annotations/xml/ejb3/orm.xml",
+ "org/hibernate/test/annotations/xml/ejb3/orm2.xml",
+ "org/hibernate/test/annotations/xml/ejb3/orm3.xml"
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Light.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Light.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Light.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+//$Id: Light.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.ejb3;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Light {
+ public String name;
+ public String power;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Lighter.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Lighter.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Lighter.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,10 @@
+//$Id: Lighter.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.ejb3;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Lighter {
+ public String name;
+ public String power;
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,39 @@
+//$Id: Manufacturer.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.ejb3;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.NamedQuery;
+import javax.persistence.TableGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)NamedQuery(name="manufacturer.findAll", query = "from Manufacturer where
1 = 2")
+@TableGenerator(name="generator", table = "this is a broken name with
select from and other SQL keywords")
+public class Manufacturer {
+ private Integer id;
+ private Set<Model> models = new HashSet<Model>();
+
+ @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @OneToMany
+ public Set<Model> getModels() {
+ return models;
+ }
+
+ public void setModels(Set<Model> models) {
+ this.models = models;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Model.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Model.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/Model.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: Model.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.ejb3;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Model {
+ private Integer id;
+ private Manufacturer manufacturer;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Manufacturer getManufacturer() {
+ return manufacturer;
+ }
+
+ public void setManufacturer(Manufacturer manufacturer) {
+ this.manufacturer = manufacturer;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="1.0"
+ >
+ <!-- no grammar specified should pass -->
+ <persistence-unit-metadata>
+ <persistence-unit-defaults>
+ <cascade-persist/>
+ </persistence-unit-defaults>
+ </persistence-unit-metadata>
+ <package>org.hibernate.test.annotations.xml.ejb3</package>
+ <table-generator name="generator" table="table_id"/>
+ <named-query name="manufacturer.findAll">
+ <query>select m from Manufacturer m</query>
+ </named-query>
+ <entity class="Model" access="PROPERTY"
name="ModelZ" metadata-complete="true">
+ <table name="ModelZ">
+ </table>
+ <inheritance strategy="JOINED"/>
+ <attributes>
+ <id name="id">
+ <column name="fld_id"/>
+ <generated-value strategy="TABLE"
generator="generator"/>
+ </id>
+ <basic name="unknownProperty"/>
+ <many-to-one name="manufacturer" fetch="LAZY">
+ <join-column name="manufacturer_pk"/>
+ </many-to-one>
+ </attributes>
+ </entity>
+ <entity class="CarModel" metadata-complete="true">
+ <primary-key-join-column name="model_id"/>
+ <inheritance strategy="JOINED"/>
+ <named-query name="allModelsPerManufacturer">
+ <query>from ModelZ m where m.manufacturer =
:manufacturer</query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <exclude-default-listeners/>
+ <exclude-superclass-listeners/>
+ <attributes>
+ <basic name="year" optional="false">
+ <temporal>DATE</temporal>
+ </basic>
+ </attributes>
+ </entity>
+ <entity class="Manufacturer">
+ <attributes>
+ <id name="id">
+ <generated-value strategy="AUTO"/>
+ </id>
+ <one-to-many name="models"
mapped-by="manufacturer"/>
+ </attributes>
+ </entity>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm2.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm2.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm2.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_1_0.xsd"
+ version="1.0"
+ >
+ <package>org.hibernate.test.annotations.xml.ejb3</package>
+ <entity class="Light" access="FIELD"
metadata-complete="true">
+ <attributes>
+ <id name="name">
+ <column name="fld_id"/>
+ </id>
+ <basic name="power"></basic>
+ </attributes>
+ </entity>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm3.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm3.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/ejb3/orm3.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_1_0.xsd"
+ version="1.0"
+ >
+ <package>org.hibernate.test.annotations.xml.ejb3</package>
+ <entity class="Lighter" access="FIELD"
metadata-complete="true">
+ <attributes>
+ <id name="name">
+ <column name="fld_id"/>
+ </id>
+ <basic name="power"></basic>
+ </attributes>
+ </entity>
+</entity-mappings>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 -->
+<hibernate-mapping>
+ <class name="org.hibernate.test.annotations.xml.hbm.AImpl"
table="A"
+ proxy="org.hibernate.test.annotations.xml.hbm.A">
+ <id name="AId" column="aID"
type="java.lang.Integer">
+ <generator class="identity"/>
+ </id>
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/A.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: A.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface A extends java.io.Serializable {
+ public Integer getAId();
+
+ public void setAId(Integer aId);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/AImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/AImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/AImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,34 @@
+//$Id: AImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+
+@Entity
+@Inheritance( strategy = InheritanceType.JOINED )
+(a)org.hibernate.annotations.Proxy( proxyClass = A.class )
+@Table( name = "A" )
+public class AImpl implements A {
+ private static final long serialVersionUID = 1L;
+
+ private Integer aId = 0;
+
+ public AImpl() {
+ }
+
+ @Id
+ @GeneratedValue
+ @Column( name = "aID" )
+ public Integer getAId() {
+ return this.aId;
+ }
+
+ public void setAId(Integer aId) {
+ this.aId = aId;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 -->
+<hibernate-mapping>
+ <joined-subclass name="org.hibernate.test.annotations.xml.hbm.BImpl"
table="B"
+ proxy="org.hibernate.test.annotations.xml.hbm.B"
+
extends="org.hibernate.test.annotations.xml.hbm.AImpl">
+ <key column="aID"/>
+ <property name="BId" column="bID"
type="java.lang.Integer"
+ not-null="true"/>
+ </joined-subclass>
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/B.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,11 @@
+//$Id: B.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface B extends A {
+ public Integer getBId();
+
+ public void setBId(Integer bId);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/BImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/BImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/BImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: BImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Entity
+(a)org.hibernate.annotations.Proxy( proxyClass = B.class )
+@Table( name = "B" )
+public class BImpl extends AImpl implements B {
+ private static final long serialVersionUID = 1L;
+
+ private Integer bId = 0;
+
+ public BImpl() {
+ super();
+ }
+
+ public Integer getBId() {
+ return bId;
+ }
+
+ public void setBId(Integer bId) {
+ this.bId = bId;
+ }
+}
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.xml.hbm">
+
+ <class name="CloudType">
+ <id name="id">
+ <generator class="native"/>
+ </id>
+ <property name="name"/>
+ </class>
+
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/CloudType.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,26 @@
+//$Id: CloudType.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CloudType {
+ private Integer id;
+ private String name;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.xml.hbm">
+
+ <class name="Government">
+ <id name="id">
+ <generator class="native"/>
+ </id>
+ <property name="name"/>
+ <many-to-one name="primeMinister"
column="primeMinister_id"/>
+ </class>
+
+</hibernate-mapping>
\ No newline at end of file
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Government.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,35 @@
+//$Id: Government.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Government {
+ private Integer id;
+ private String name;
+ private PrimeMinister primeMinister;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public PrimeMinister getPrimeMinister() {
+ return primeMinister;
+ }
+
+ public void setPrimeMinister(PrimeMinister primeMinister) {
+ this.primeMinister = primeMinister;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,82 @@
+//$Id:HbmTest.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.HashSet;
+
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class HbmTest extends TestCase {
+
+ public void testManyToOne() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Government gov = new Government();
+ gov.setName( "Liberals" );
+ s.save( gov );
+ PrimeMinister pm = new PrimeMinister();
+ pm.setName( "Murray" );
+ pm.setCurrentGovernment( gov );
+ s.save( pm );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testOneToMany() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ Government gov = new Government();
+ gov.setName( "Liberals" );
+ Government gov2 = new Government();
+ gov2.setName( "Liberals2" );
+ s.save( gov );
+ s.save( gov2 );
+ PrimeMinister pm = new PrimeMinister();
+ pm.setName( "Murray" );
+ pm.setCurrentGovernment( gov );
+ pm.setGovernments( new HashSet() );
+ pm.getGovernments().add( gov2 );
+ pm.getGovernments().add( gov );
+ gov.setPrimeMinister( pm );
+ gov2.setPrimeMinister( pm );
+ s.save( pm );
+ s.flush();
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ public void testManyToMany() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ CloudType type = new CloudType();
+ type.setName( "Cumulus" );
+ Sky sky = new Sky();
+ s.persist( type );
+ sky.getCloudTypes().add(type);
+ s.persist( sky );
+ s.flush();
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ PrimeMinister.class,
+ Sky.class,
+
+ };
+ }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[]{
+ "org/hibernate/test/annotations/xml/hbm/Government.hbm.xml",
+ "org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml",
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmWithIdentityTest.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmWithIdentityTest.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/HbmWithIdentityTest.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,51 @@
+//$Id:HbmTest.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.HashSet;
+
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class HbmWithIdentityTest extends TestCase {
+
+ public void testManyToOneAndInterface() throws Exception {
+ Session s = openSession();
+ s.getTransaction().begin();
+ B b = new BImpl();
+ b.setBId( 1 );
+ s.persist( b );
+ Z z = new ZImpl();
+ z.setB( b );
+ s.persist( z );
+ s.flush();
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+
+
+ @Override
+ protected boolean runForCurrentDialect() {
+ return super.runForCurrentDialect() && getDialect().supportsIdentityColumns();
+ }
+
+
+
+ protected Class[] getMappings() {
+ return new Class[]{
+ ZImpl.class
+ };
+ }
+
+ @Override
+ protected String[] getXmlFiles() {
+ return new String[]{
+ "org/hibernate/test/annotations/xml/hbm/A.hbm.xml",
+ "org/hibernate/test/annotations/xml/hbm/B.hbm.xml"
+ };
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,57 @@
+//$Id:PrimeMinister.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class PrimeMinister {
+ private Integer id;
+ private String name;
+ private Government currentGovernment;
+ private Set<Government> governments;
+
+ @ManyToOne
+ public Government getCurrentGovernment() {
+ return currentGovernment;
+ }
+
+ public void setCurrentGovernment(Government currentGovernment) {
+ this.currentGovernment = currentGovernment;
+ }
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "primeMinister")
+ public Set<Government> getGovernments() {
+ return governments;
+ }
+
+ public void setGovernments(Set<Government> governments) {
+ this.governments = governments;
+ }
+
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Sky.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Sky.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Sky.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,47 @@
+//$Id: Sky.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity(name="EarthSky")
+public class Sky {
+ private Integer id;
+ private Set<CloudType> cloudTypes = new HashSet<CloudType>();
+ private CloudType mainCloud;
+
+ @ManyToMany
+ public Set<CloudType> getCloudTypes() {
+ return cloudTypes;
+ }
+
+ public void setCloudTypes(Set<CloudType> cloudTypes) {
+ this.cloudTypes = cloudTypes;
+ }
+
+ @Id @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @ManyToOne
+ public CloudType getMainCloud() {
+ return mainCloud;
+ }
+
+ public void setMainCloud(CloudType mainCloud) {
+ this.mainCloud = mainCloud;
+ }
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Z.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Z.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/Z.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,15 @@
+//$Id: Z.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Z extends java.io.Serializable {
+ public Integer getZId();
+
+ public void setZId(Integer zId);
+
+ public B getB();
+
+ public void setB(B b);
+}
Added:
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/ZImpl.java
===================================================================
---
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/ZImpl.java
(rev 0)
+++
annotations/branches/v3_4_0_GA_CP/src/test/java/org/hibernate/test/annotations/xml/hbm/ZImpl.java 2009-11-24
21:03:15 UTC (rev 18049)
@@ -0,0 +1,45 @@
+//$Id: ZImpl.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.xml.hbm;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+
+@Entity
+@Inheritance( strategy = InheritanceType.JOINED )
+(a)org.hibernate.annotations.Proxy( proxyClass = Z.class )
+@Table( name = "Z" )
+public class ZImpl implements Z {
+ private static final long serialVersionUID = 1L;
+
+ private Integer zId = null;
+ private B b = null;
+
+ @Id
+ @GeneratedValue
+ @Column( name = "zID" )
+ public Integer getZId() {
+ return zId;
+ }
+
+ public void setZId(Integer zId) {
+ this.zId = zId;
+ }
+
+ @ManyToOne( optional = false, targetEntity = BImpl.class, fetch = FetchType.LAZY )
+ @JoinColumn( name = "bID", referencedColumnName = "bID")
+ public B getB() {
+ return b;
+ }
+
+ public void setB(B b) {
+ this.b = b;
+ }
+}