├── .gitattributes
├── 9781484273364.jpg
├── Contributing.md
├── LICENSE.txt
├── README.md
├── chapter01
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ ├── java
│ │ ├── chapter01
│ │ │ ├── desktop.ini
│ │ │ ├── hibernate
│ │ │ │ ├── Message.java
│ │ │ │ └── desktop.ini
│ │ │ └── pojo
│ │ │ │ ├── Message.java
│ │ │ │ ├── MessageEntity.java
│ │ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── resources
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter01
│ │ ├── desktop.ini
│ │ ├── hibernate
│ │ │ ├── PersistenceTest.java
│ │ │ └── desktop.ini
│ │ └── jdbc
│ │ │ ├── PersistenceTest.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter02
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter02
│ │ ├── desktop.ini
│ │ └── hibernate
│ │ │ ├── Message.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter02
│ │ ├── desktop.ini
│ │ └── hibernate
│ │ │ ├── PersistenceTest.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter03
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter03
│ │ ├── application
│ │ │ ├── HibernateRankingService.java
│ │ │ ├── RankingService.java
│ │ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ ├── hibernate
│ │ │ ├── Person.java
│ │ │ ├── Ranking.java
│ │ │ ├── Skill.java
│ │ │ └── desktop.ini
│ │ └── simple
│ │ │ ├── Person.java
│ │ │ ├── Ranking.java
│ │ │ ├── Skill.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter03
│ │ ├── application
│ │ │ ├── AddRankingTest.java
│ │ │ ├── FindAllRankingsTest.java
│ │ │ ├── FindAverageRankingTest.java
│ │ │ ├── FindBestRankingTest.java
│ │ │ ├── RemoveRankingTest.java
│ │ │ ├── UpdateRankingTest.java
│ │ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ ├── hibernate
│ │ │ ├── PersonTest.java
│ │ │ ├── RankingTest.java
│ │ │ └── desktop.ini
│ │ └── simple
│ │ │ ├── ModelTest.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter04
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter04
│ │ ├── broken
│ │ │ ├── Email.java
│ │ │ ├── Message.java
│ │ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ ├── id
│ │ │ ├── GeneratedAutoIdentity.java
│ │ │ ├── GeneratedIdentityIdentity.java
│ │ │ ├── GeneratedSequenceIdentity.java
│ │ │ ├── GeneratedTableIdentity.java
│ │ │ ├── NongeneratedIdentity.java
│ │ │ └── desktop.ini
│ │ ├── mapped
│ │ │ ├── Email.java
│ │ │ ├── Message.java
│ │ │ └── desktop.ini
│ │ ├── model
│ │ │ ├── SimpleObject.java
│ │ │ └── desktop.ini
│ │ └── orphan
│ │ │ ├── Book.java
│ │ │ ├── Library.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter04
│ │ ├── broken
│ │ │ ├── BrokenInversionTest.java
│ │ │ ├── ImplicitRelationshipTest.java
│ │ │ ├── ProperSimpleInversionTest.java
│ │ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ ├── general
│ │ │ ├── DuplicateSaveTest.java
│ │ │ ├── MergeTest.java
│ │ │ ├── RefreshTest.java
│ │ │ ├── SaveLoadTest.java
│ │ │ ├── SaveOrUpdateTest.java
│ │ │ ├── ValidateSimpleObject.java
│ │ │ └── desktop.ini
│ │ ├── id
│ │ │ ├── IdentityTest.java
│ │ │ └── desktop.ini
│ │ ├── mapped
│ │ │ ├── ImplicitRelationshipTest.java
│ │ │ ├── WorkingInversionTest.java
│ │ │ └── desktop.ini
│ │ └── orphan
│ │ │ ├── OrphanRemovalTest.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter05
├── README.txt
├── desktop.ini
└── pom.xml
├── chapter06
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter06
│ │ ├── compoundpk
│ │ │ ├── CPKBook.java
│ │ │ ├── EmbeddedPKBook.java
│ │ │ ├── ISBN.java
│ │ │ ├── IdClassBook.java
│ │ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ ├── embedded
│ │ │ ├── Author.java
│ │ │ ├── EBook.java
│ │ │ ├── User.java
│ │ │ └── desktop.ini
│ │ ├── joined
│ │ │ ├── Book.java
│ │ │ ├── ComputerBook.java
│ │ │ └── desktop.ini
│ │ ├── mapped
│ │ │ ├── Book.java
│ │ │ ├── ComputerBook.java
│ │ │ └── desktop.ini
│ │ ├── naturalid
│ │ │ ├── Employee.java
│ │ │ ├── SimpleNaturalIdEmployee.java
│ │ │ └── desktop.ini
│ │ ├── perclass
│ │ │ ├── Book.java
│ │ │ ├── ComputerBook.java
│ │ │ └── desktop.ini
│ │ ├── primarykey
│ │ │ ├── after
│ │ │ │ ├── Book.java
│ │ │ │ └── desktop.ini
│ │ │ ├── before
│ │ │ │ ├── Book.java
│ │ │ │ └── desktop.ini
│ │ │ └── desktop.ini
│ │ ├── single
│ │ │ ├── Book.java
│ │ │ ├── ComputerBook.java
│ │ │ └── desktop.ini
│ │ └── twotables
│ │ │ ├── Customer.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter06
│ │ ├── desktop.ini
│ │ ├── naturalid
│ │ │ ├── IdTestBase.java
│ │ │ ├── IdTestSimple.java
│ │ │ ├── NaturalIdTest.java
│ │ │ └── desktop.ini
│ │ └── primarykey
│ │ │ ├── BookTest.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter07
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter07
│ │ ├── desktop.ini
│ │ ├── lifecycle
│ │ │ ├── FailingEntity.java
│ │ │ ├── LifecycleThing.java
│ │ │ ├── UserAccount.java
│ │ │ ├── UserAccountListener.java
│ │ │ └── desktop.ini
│ │ ├── unvalidated
│ │ │ ├── UnvalidatedSimplePerson.java
│ │ │ └── desktop.ini
│ │ └── validated
│ │ │ ├── Coordinate.java
│ │ │ ├── NoQuadrantIII.java
│ │ │ ├── QuadrantIIIValidator.java
│ │ │ ├── ValidatedPerson.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter07
│ │ ├── desktop.ini
│ │ ├── lifecycle
│ │ │ ├── ExternalListenerTest.java
│ │ │ ├── FirstLifecycleTest.java
│ │ │ ├── LifecycleTest.java
│ │ │ └── desktop.ini
│ │ └── validator
│ │ │ ├── CoordinateTest.java
│ │ │ ├── ParameterizedTest.java
│ │ │ ├── ValidatorTest.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── META-INF
│ ├── desktop.ini
│ └── persistence.xml
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter08
├── desktop.ini
├── ignite
│ ├── README.txt
│ ├── desktop.ini
│ └── work
│ │ ├── db
│ │ ├── desktop.ini
│ │ └── marshaller
│ │ │ ├── -1371708859.classname0
│ │ │ ├── -1506295794.classname0
│ │ │ ├── -504747370.classname0
│ │ │ ├── -521783090.classname0
│ │ │ ├── 1030255148.classname0
│ │ │ ├── 1858680314.classname0
│ │ │ ├── 250465742.classname0
│ │ │ ├── 269083043.classname0
│ │ │ ├── 269083044.classname0
│ │ │ ├── 337622557.classname0
│ │ │ ├── 342747538.classname0
│ │ │ ├── 342747539.classname0
│ │ │ ├── 358768682.classname0
│ │ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ └── diagnostic
│ │ └── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter08
│ │ ├── desktop.ini
│ │ └── model
│ │ │ ├── Publisher.java
│ │ │ ├── Subscriber.java
│ │ │ ├── Supplier.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter08
│ │ ├── DeadlockExample.java
│ │ ├── QueryTest.java
│ │ ├── TransactionExample.java
│ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── ehcache.xml
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter09
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter09
│ │ ├── desktop.ini
│ │ └── model
│ │ │ ├── Product.java
│ │ │ ├── Software.java
│ │ │ ├── Supplier.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter09
│ │ ├── DeleteHQLTest.java
│ │ ├── QueryTest.java
│ │ ├── TestBase.java
│ │ ├── TestBiggerProjection.java
│ │ ├── TestJoinArray.java
│ │ ├── TestJoinObject.java
│ │ ├── TestNamedEntity.java
│ │ ├── TestNamedParams.java
│ │ ├── TestNamedQuery.java
│ │ ├── TestNativeQuery.java
│ │ ├── TestPagination.java
│ │ ├── TestSimpleProjection.java
│ │ ├── TestSimpleQuery.java
│ │ ├── TestSingleResult.java
│ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter10
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ └── java
│ │ ├── chapter10
│ │ ├── desktop.ini
│ │ ├── model
│ │ │ ├── User.java
│ │ │ └── desktop.ini
│ │ └── userrole
│ │ │ ├── Role1.java
│ │ │ ├── User1.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter10
│ │ ├── UserRoleTests.java
│ │ ├── desktop.ini
│ │ └── first
│ │ │ ├── TestBase.java
│ │ │ ├── TestMultipleFilters.java
│ │ │ ├── TestNoFilter.java
│ │ │ ├── TestParameterFilter.java
│ │ │ ├── TestSimpleFilter.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── chapter11
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ ├── java
│ │ ├── chapter11
│ │ │ ├── desktop.ini
│ │ │ ├── dto
│ │ │ │ ├── CommentDTO.java
│ │ │ │ ├── PostDTO.java
│ │ │ │ ├── UserDTO.java
│ │ │ │ └── desktop.ini
│ │ │ ├── model
│ │ │ │ ├── Comment.java
│ │ │ │ ├── Post.java
│ │ │ │ ├── User.java
│ │ │ │ └── desktop.ini
│ │ │ ├── services
│ │ │ │ ├── CommentManager.java
│ │ │ │ ├── CommentManagerImpl.java
│ │ │ │ ├── PostManager.java
│ │ │ │ ├── PostManagerImpl.java
│ │ │ │ ├── Services.java
│ │ │ │ ├── ServicesImpl.java
│ │ │ │ ├── UserManager.java
│ │ │ │ ├── UserManagerImpl.java
│ │ │ │ └── desktop.ini
│ │ │ └── servlets
│ │ │ │ ├── AddCommentServlet.java
│ │ │ │ ├── AddPostServlet.java
│ │ │ │ ├── AddUserServlet.java
│ │ │ │ ├── AddUserServletDTO.java
│ │ │ │ ├── BadAddUserServlet.java
│ │ │ │ ├── GetPostServlet.java
│ │ │ │ ├── GetPostsServlet.java
│ │ │ │ ├── HelloWorld.java
│ │ │ │ ├── ServletBase.java
│ │ │ │ ├── SimpleGetPostsServlet.java
│ │ │ │ └── desktop.ini
│ │ └── desktop.ini
│ ├── resources
│ │ ├── desktop.ini
│ │ ├── hibernate.cfg.xml
│ │ └── logback.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ └── desktop.ini
│ │ └── desktop.ini
│ └── test
│ ├── desktop.ini
│ ├── java
│ ├── chapter11
│ │ ├── desktop.ini
│ │ ├── services
│ │ │ ├── PostManagerTest.java
│ │ │ ├── TestBase.java
│ │ │ ├── UserManagerTest.java
│ │ │ └── desktop.ini
│ │ └── servlets
│ │ │ ├── AddCommentService.java
│ │ │ ├── AddCommentServletTest.java
│ │ │ ├── AddPostService.java
│ │ │ ├── AddPostServletTest.java
│ │ │ ├── AddUserService.java
│ │ │ ├── AddUserServletTest.java
│ │ │ ├── BadAddUserServletTest.java
│ │ │ ├── BaseService.java
│ │ │ ├── GetPostService.java
│ │ │ ├── GetPostsService.java
│ │ │ ├── GetPostsServletTest.java
│ │ │ ├── HelloWorldTest.java
│ │ │ ├── SimpleGetPostsService.java
│ │ │ ├── TestBase.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── resources
│ ├── desktop.ini
│ └── servlets.json
├── chapter12
├── activej
│ ├── desktop.ini
│ ├── pom.xml
│ └── src
│ │ ├── desktop.ini
│ │ └── main
│ │ ├── desktop.ini
│ │ ├── java
│ │ ├── ch12
│ │ │ ├── Endpoints.java
│ │ │ ├── ObjectMapperFactory.java
│ │ │ ├── PostApp.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ │ └── resources
│ │ └── desktop.ini
├── ch12common
│ ├── desktop.ini
│ ├── pom.xml
│ └── src
│ │ ├── desktop.ini
│ │ └── main
│ │ ├── desktop.ini
│ │ ├── java
│ │ ├── ch12
│ │ │ ├── HibernatePostManager.java
│ │ │ ├── Post.java
│ │ │ ├── PostManager.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ │ └── resources
│ │ ├── desktop.ini
│ │ ├── hibernate.cfg.xml
│ │ └── logback.xml
├── desktop.ini
├── pom.xml
├── quarkus
│ ├── README.md
│ ├── desktop.ini
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ ├── src
│ │ ├── desktop.ini
│ │ ├── main
│ │ │ ├── desktop.ini
│ │ │ ├── docker
│ │ │ │ ├── Dockerfile.jvm
│ │ │ │ ├── Dockerfile.legacy-jar
│ │ │ │ ├── Dockerfile.native
│ │ │ │ ├── Dockerfile.native-distroless
│ │ │ │ └── desktop.ini
│ │ │ ├── java
│ │ │ │ ├── ch12
│ │ │ │ │ ├── HelloWorld.java
│ │ │ │ │ ├── HibernatePostManager.java
│ │ │ │ │ ├── Post.java
│ │ │ │ │ ├── PostEndpoint.java
│ │ │ │ │ ├── PostManager.java
│ │ │ │ │ └── desktop.ini
│ │ │ │ └── desktop.ini
│ │ │ └── resources
│ │ │ │ ├── META-INF
│ │ │ │ ├── desktop.ini
│ │ │ │ └── resources
│ │ │ │ │ ├── desktop.ini
│ │ │ │ │ └── index.html
│ │ │ │ ├── application.properties
│ │ │ │ └── desktop.ini
│ │ └── test
│ │ │ ├── desktop.ini
│ │ │ └── java
│ │ │ ├── ch12
│ │ │ ├── HelloWorldTest.java
│ │ │ ├── NativeHelloWorldIT.java
│ │ │ └── desktop.ini
│ │ │ └── desktop.ini
│ └── target
│ │ ├── classes
│ │ ├── META-INF
│ │ │ ├── desktop.ini
│ │ │ └── resources
│ │ │ │ ├── desktop.ini
│ │ │ │ └── index.html
│ │ ├── application.properties
│ │ ├── ch12
│ │ │ ├── HelloWorld.class
│ │ │ ├── HibernatePostManager.class
│ │ │ ├── Post.class
│ │ │ ├── PostEndpoint.class
│ │ │ ├── PostManager.class
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ │ ├── desktop.ini
│ │ ├── generated-sources
│ │ ├── annotations
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ │ ├── generated-test-sources
│ │ ├── desktop.ini
│ │ └── test-annotations
│ │ │ └── desktop.ini
│ │ ├── maven-status
│ │ ├── desktop.ini
│ │ └── maven-compiler-plugin
│ │ │ ├── compile
│ │ │ ├── desktop.ini
│ │ │ └── null
│ │ │ │ ├── createdFiles.lst
│ │ │ │ ├── desktop.ini
│ │ │ │ └── inputFiles.lst
│ │ │ ├── desktop.ini
│ │ │ └── testCompile
│ │ │ ├── desktop.ini
│ │ │ └── null
│ │ │ ├── createdFiles.lst
│ │ │ ├── desktop.ini
│ │ │ └── inputFiles.lst
│ │ ├── quarkus-dev.jar
│ │ ├── quarkus
│ │ ├── bootstrap
│ │ │ ├── desktop.ini
│ │ │ └── dev-app-model.dat
│ │ └── desktop.ini
│ │ └── test-classes
│ │ ├── ch12
│ │ ├── HelloWorldTest.class
│ │ ├── NativeHelloWorldIT.class
│ │ └── desktop.ini
│ │ └── desktop.ini
├── spring
│ ├── desktop.ini
│ ├── pom.xml
│ └── src
│ │ ├── desktop.ini
│ │ └── main
│ │ ├── desktop.ini
│ │ ├── java
│ │ ├── ch12
│ │ │ ├── Main.java
│ │ │ └── desktop.ini
│ │ └── desktop.ini
│ │ └── resources
│ │ └── desktop.ini
└── springboot
│ ├── desktop.ini
│ ├── pom.xml
│ └── src
│ ├── desktop.ini
│ └── main
│ ├── desktop.ini
│ └── java
│ ├── ch12
│ ├── PostApplication.java
│ ├── PostController.java
│ ├── PostRepository.java
│ └── desktop.ini
│ └── desktop.ini
├── chapter13
├── desktop.ini
├── pom.xml
└── src
│ ├── desktop.ini
│ ├── main
│ ├── desktop.ini
│ ├── java
│ │ ├── chapter13
│ │ │ ├── desktop.ini
│ │ │ └── model
│ │ │ │ ├── User.java
│ │ │ │ └── desktop.ini
│ │ └── desktop.ini
│ └── resources
│ │ ├── desktop.ini
│ │ ├── hibernate.cfg.xml
│ │ └── logback.xml
│ └── test
│ ├── desktop.ini
│ └── java
│ ├── chapter13
│ ├── BaseTest.java
│ ├── FindLastActiveUserRevisionTest.java
│ ├── HandleDeletedRevisionsTest.java
│ ├── RevertDataTest.java
│ ├── ValidateRevisionCountTest.java
│ ├── ValidateRevisionDataTest.java
│ ├── ValidateRevisionSnapshotTest.java
│ └── desktop.ini
│ └── desktop.ini
├── errata.md
├── pom.xml
└── util
├── desktop.ini
├── pom.xml
└── src
├── desktop.ini
├── main
├── desktop.ini
└── java
│ ├── com
│ ├── autumncode
│ │ ├── desktop.ini
│ │ ├── hibernate
│ │ │ ├── desktop.ini
│ │ │ └── util
│ │ │ │ ├── SessionUtil.java
│ │ │ │ └── desktop.ini
│ │ └── jpa
│ │ │ ├── desktop.ini
│ │ │ └── util
│ │ │ ├── JPASessionUtil.java
│ │ │ └── desktop.ini
│ └── desktop.ini
│ └── desktop.ini
└── test
├── desktop.ini
├── java
├── com
│ ├── autumncode
│ │ ├── desktop.ini
│ │ ├── hibernate
│ │ │ ├── desktop.ini
│ │ │ └── util
│ │ │ │ ├── SessionBuilderTest.java
│ │ │ │ └── desktop.ini
│ │ ├── jpa
│ │ │ ├── desktop.ini
│ │ │ └── util
│ │ │ │ ├── JPASessionUtilTest.java
│ │ │ │ └── desktop.ini
│ │ └── util
│ │ │ ├── desktop.ini
│ │ │ └── model
│ │ │ ├── Thing.java
│ │ │ └── desktop.ini
│ └── desktop.ini
└── desktop.ini
└── resources
├── META-INF
├── desktop.ini
└── persistence.xml
├── desktop.ini
├── hibernate.cfg.xml
└── logback.xml
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/9781484273364.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/9781484273364.jpg
--------------------------------------------------------------------------------
/Contributing.md:
--------------------------------------------------------------------------------
1 | # Contributing to Apress Source Code
2 |
3 | Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers.
4 |
5 | ## How to Contribute
6 |
7 | 1. Make sure you have a GitHub account.
8 | 2. Fork the repository for the relevant book.
9 | 3. Create a new branch on which to make your change, e.g.
10 | `git checkout -b my_code_contribution`
11 | 4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted.
12 | 5. Submit a pull request.
13 |
14 | Thank you for your contribution!
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Apress Source Code
2 |
3 | This repository accompanies [*Beginning Hibernate 6*](https://www.apress.com/9781484273364) by Joseph B. Ottinger, Jeff Linwood, and Dave Minter (Apress, 2022).
4 |
5 | [comment]: #cover
6 | 
7 |
8 | Download the files as a zip using the green button, or clone the repository to your machine using Git.
9 |
10 | ## Releases
11 |
12 | Release v1.0 corresponds to the code in the published book, without corrections or updates.
13 |
14 | ## Contributions
15 |
16 | See the file Contributing.md for more information on how you can contribute to this repository.
--------------------------------------------------------------------------------
/chapter01/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | com.autumncode.books.hibernate
8 | hibernate-6-parent
9 | 5.0
10 |
11 | 4.0.0
12 |
13 | chapter01
14 |
15 |
--------------------------------------------------------------------------------
/chapter01/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/main/java/chapter01/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/main/java/chapter01/hibernate/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/main/java/chapter01/pojo/Message.java:
--------------------------------------------------------------------------------
1 | package chapter01.pojo;
2 |
3 | import java.util.Objects;
4 |
5 | public class Message {
6 | String text;
7 |
8 | public Message(String text) {
9 | setText(text);
10 | }
11 |
12 | public String getText() {
13 | return text;
14 | }
15 |
16 | public void setText(String text) {
17 | this.text = text;
18 | }
19 |
20 | @Override
21 | public boolean equals(Object o) {
22 | if (this == o) return true;
23 | if (!(o instanceof Message)) return false;
24 | Message message = (Message) o;
25 | return Objects.equals(getText(), message.getText());
26 | }
27 |
28 | @Override
29 | public int hashCode() {
30 | return Objects.hash(getText());
31 | }
32 |
33 | @Override
34 | public String toString() {
35 | return String.format("Message{text='%s'}", getText());
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/chapter01/src/main/java/chapter01/pojo/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/main/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/java/chapter01/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/java/chapter01/hibernate/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/java/chapter01/jdbc/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter01/src/test/resources/hibernate.cfg.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 | org.h2.Driver
9 | jdbc:h2:./db1
10 | sa
11 |
12 | org.hibernate.dialect.H2Dialect
13 |
14 | true
15 |
16 | create-drop
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/chapter01/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter02/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 | com.autumncode.books.hibernate
9 | hibernate-6-parent
10 | 5.0
11 |
12 | 4.0.0
13 |
14 | chapter02
15 |
16 |
17 |
18 |
19 | org.hibernate.orm
20 | hibernate-hikaricp
21 | ${hibernate.core.version}
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/chapter02/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/main/java/chapter02/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/main/java/chapter02/hibernate/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/test/java/chapter02/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/test/java/chapter02/hibernate/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter02/src/test/resources/hibernate.cfg.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 | org.h2.Driver
9 | jdbc:h2:./db2
10 | sa
11 |
12 | org.hibernate.dialect.H2Dialect
13 |
14 | true
15 |
16 | create-drop
17 |
18 |
19 |
--------------------------------------------------------------------------------
/chapter02/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter03/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | hibernate-6-parent
7 | com.autumncode.books.hibernate
8 | 5.0
9 |
10 | 4.0.0
11 | chapter03
12 |
13 |
14 |
15 | com.autumncode.books.hibernate
16 | util
17 | ${project.version}
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/chapter03/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/application/RankingService.java:
--------------------------------------------------------------------------------
1 | //tag::preamble[]
2 | package chapter03.application;
3 |
4 | import chapter03.hibernate.Person;
5 |
6 | import java.util.Map;
7 |
8 | public interface RankingService {
9 | int getRankingFor(String subject, String skill);
10 |
11 | void addRanking(String subject, String observer, String skill, int ranking);
12 |
13 | //end::preamble[]
14 | void updateRanking(String subject, String observer, String skill, int ranking);
15 |
16 | void removeRanking(String subject, String observer, String skill);
17 |
18 | Map findRankingsFor(String subject);
19 |
20 | Person findBestPersonFor(String skill);
21 | }
22 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/application/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/hibernate/Skill.java:
--------------------------------------------------------------------------------
1 | package chapter03.hibernate;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class Skill {
7 | @Column
8 | private String name;
9 | @Id
10 | @GeneratedValue(strategy = GenerationType.AUTO)
11 | private Long id;
12 |
13 | public Skill() {
14 | }
15 |
16 | public Long getId() {
17 | return id;
18 | }
19 |
20 | public void setId(Long id) {
21 | this.id = id;
22 | }
23 |
24 | public String getName() {
25 | return name;
26 | }
27 |
28 | public void setName(String name) {
29 | this.name = name;
30 | }
31 |
32 | @Override
33 | public String toString() {
34 | return "Skill{" +
35 | "id=" + id +
36 | ", name='" + name + '\'' +
37 | '}';
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/hibernate/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/simple/Person.java:
--------------------------------------------------------------------------------
1 | package chapter03.simple;
2 |
3 | public class Person {
4 | private String name;
5 |
6 | public Person() {
7 | }
8 |
9 | public String getName() {
10 | return name;
11 | }
12 |
13 | public void setName(String name) {
14 | this.name = name;
15 | }
16 |
17 | @Override
18 | public String toString() {
19 | return "Person{" +
20 | "name='" + name + '\'' +
21 | '}';
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/simple/Ranking.java:
--------------------------------------------------------------------------------
1 | package chapter03.simple;
2 |
3 | public class Ranking {
4 | Person subject;
5 | Person observer;
6 | Skill skill;
7 | Integer ranking;
8 |
9 | public Ranking() {
10 | }
11 |
12 | public Person getSubject() {
13 | return subject;
14 | }
15 |
16 | public void setSubject(Person subject) {
17 | this.subject = subject;
18 | }
19 |
20 | public Person getObserver() {
21 | return observer;
22 | }
23 |
24 | public void setObserver(Person observer) {
25 | this.observer = observer;
26 | }
27 |
28 | public Skill getSkill() {
29 | return skill;
30 | }
31 |
32 | public void setSkill(Skill skill) {
33 | this.skill = skill;
34 | }
35 |
36 | public Integer getRanking() {
37 | return ranking;
38 | }
39 |
40 | public void setRanking(Integer ranking) {
41 | this.ranking = ranking;
42 | }
43 |
44 | @Override
45 | public String toString() {
46 | return "Ranking{" +
47 | "subject=" + subject +
48 | ", observer=" + observer +
49 | ", skill=" + skill +
50 | ", ranking=" + ranking +
51 | '}';
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/simple/Skill.java:
--------------------------------------------------------------------------------
1 | package chapter03.simple;
2 |
3 | public class Skill {
4 | String name;
5 |
6 | public Skill() {
7 | }
8 |
9 | public String getName() {
10 | return name;
11 | }
12 |
13 | public void setName(String name) {
14 | this.name = name;
15 | }
16 |
17 | @Override
18 | public String toString() {
19 | return "Skill{" +
20 | "name='" + name + '\'' +
21 | '}';
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/chapter03/simple/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/application/AddRankingTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.application;
2 |
3 | import org.testng.annotations.Test;
4 |
5 | import static org.testng.Assert.assertEquals;
6 |
7 | public class AddRankingTest {
8 | RankingService service = new HibernateRankingService();
9 |
10 | @Test
11 | public void addRanking() {
12 | service.addRanking("J. C. Smell", "Drew Lombardo", "Mule", 8);
13 | assertEquals(service.getRankingFor("J. C. Smell", "Mule"), 8);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/application/FindAverageRankingTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.application;
2 |
3 | import org.testng.annotations.Test;
4 |
5 | import static org.testng.Assert.assertEquals;
6 |
7 | public class FindAverageRankingTest {
8 | RankingService service = new HibernateRankingService();
9 |
10 | @Test
11 | public void validateRankingAverage() {
12 | service.addRanking("A", "B", "C", 4);
13 | service.addRanking("A", "B", "C", 5);
14 | service.addRanking("A", "B", "C", 6);
15 | assertEquals(service.getRankingFor("A", "C"), 5);
16 | service.addRanking("A", "B", "C", 7);
17 | service.addRanking("A", "B", "C", 8);
18 | assertEquals(service.getRankingFor("A", "C"), 6);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/application/FindBestRankingTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.application;
2 |
3 | import chapter03.hibernate.Person;
4 | import org.testng.annotations.Test;
5 |
6 | import static org.testng.Assert.assertEquals;
7 | import static org.testng.Assert.assertNull;
8 |
9 | public class FindBestRankingTest {
10 | RankingService service = new HibernateRankingService();
11 |
12 | @Test
13 | public void findBestForNonexistentSkill() {
14 | Person p = service.findBestPersonFor("no skill");
15 | assertNull(p);
16 | }
17 |
18 | @Test
19 | public void findBestForSkill() {
20 | service.addRanking("S1", "O1", "Sk1", 6);
21 | service.addRanking("S1", "O2", "Sk1", 8);
22 | service.addRanking("S2", "O1", "Sk1", 5);
23 | service.addRanking("S2", "O2", "Sk1", 7);
24 | service.addRanking("S3", "O1", "Sk1", 7);
25 | service.addRanking("S3", "O2", "Sk1", 9);
26 | // data that should not factor in!
27 | service.addRanking("S1", "O2", "Sk2", 2);
28 |
29 | Person p = service.findBestPersonFor("Sk1");
30 | assertEquals(p.getName(), "S3");
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/application/RemoveRankingTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.application;
2 |
3 | import org.testng.annotations.Test;
4 |
5 | import static org.testng.Assert.assertEquals;
6 |
7 | public class RemoveRankingTest {
8 | RankingService service = new HibernateRankingService();
9 |
10 | @Test
11 | public void removeRanking() {
12 | service.addRanking("R1", "R2", "RS1", 8);
13 | assertEquals(service.getRankingFor("R1", "RS1"), 8);
14 | service.removeRanking("R1", "R2", "RS1");
15 | assertEquals(service.getRankingFor("R1", "RS1"), 0);
16 | }
17 |
18 | @Test
19 | public void removeNonexistentRanking() {
20 | service.removeRanking("R3", "R4", "RS2");
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/application/UpdateRankingTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.application;
2 |
3 | import org.testng.annotations.Test;
4 |
5 | import static org.testng.Assert.assertEquals;
6 |
7 | public class UpdateRankingTest {
8 | RankingService service = new HibernateRankingService();
9 | static final String SCOTT = "Scotball Most";
10 | static final String GENE = "Gene Showrama";
11 | static final String CEYLON = "Ceylon";
12 |
13 | @Test
14 | public void updateExistingRanking() {
15 | service.addRanking(GENE, SCOTT, CEYLON, 6);
16 | assertEquals(service.getRankingFor(GENE, CEYLON), 6);
17 | service.updateRanking(GENE, SCOTT, CEYLON, 7);
18 | assertEquals(service.getRankingFor(GENE, CEYLON), 7);
19 | }
20 |
21 | @Test
22 | public void updateNonexistentRanking() {
23 | assertEquals(service.getRankingFor(SCOTT, CEYLON), 0);
24 | service.updateRanking(SCOTT, GENE, CEYLON, 7);
25 | assertEquals(service.getRankingFor(SCOTT, CEYLON), 7);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/application/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/hibernate/PersonTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.hibernate;
2 |
3 | import org.hibernate.Session;
4 | import org.hibernate.SessionFactory;
5 | import org.hibernate.Transaction;
6 | import org.hibernate.boot.MetadataSources;
7 | import org.hibernate.boot.registry.StandardServiceRegistry;
8 | import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9 | import org.testng.annotations.BeforeClass;
10 | import org.testng.annotations.Test;
11 |
12 | public class PersonTest {
13 | SessionFactory factory;
14 |
15 | @BeforeClass
16 | public void setup() {
17 | StandardServiceRegistry registry =
18 | new StandardServiceRegistryBuilder()
19 | .configure()
20 | .build();
21 | factory = new MetadataSources(registry)
22 | .buildMetadata()
23 | .buildSessionFactory();
24 | }
25 |
26 | @Test
27 | public void testSavePerson() {
28 | try (Session session = factory.openSession()) {
29 | Transaction tx = session.beginTransaction();
30 | Person person = new Person();
31 | person.setName("J. C. Smell");
32 |
33 | session.save(person);
34 |
35 | tx.commit();
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/hibernate/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/simple/ModelTest.java:
--------------------------------------------------------------------------------
1 | package chapter03.simple;
2 |
3 | import org.testng.annotations.Test;
4 |
5 | public class ModelTest {
6 | @Test
7 | public void testModelCreation() {
8 | Person subject = new Person();
9 | subject.setName("J. C. Smell");
10 |
11 | Person observer = new Person();
12 | observer.setName("Drew Lombardo");
13 |
14 | Skill skill = new Skill();
15 | skill.setName("Java");
16 |
17 | Ranking ranking = new Ranking();
18 | ranking.setSubject(subject);
19 | ranking.setObserver(observer);
20 | ranking.setSkill(skill);
21 | ranking.setRanking(8);
22 |
23 | // just to give us visual verification
24 | System.out.println(ranking);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/chapter03/simple/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter03/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter04/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | hibernate-6-parent
8 | com.autumncode.books.hibernate
9 | 5.0
10 |
11 |
12 | 4.0.0
13 | chapter04
14 |
15 |
16 |
17 | com.autumncode.books.hibernate
18 | util
19 | ${project.version}
20 |
21 |
22 |
--------------------------------------------------------------------------------
/chapter04/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/broken/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/id/GeneratedAutoIdentity.java:
--------------------------------------------------------------------------------
1 | package chapter04.id;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class GeneratedAutoIdentity {
7 | @Id
8 | @GeneratedValue(strategy = GenerationType.AUTO)
9 | Long id;
10 | @Column
11 | String value;
12 |
13 | public GeneratedAutoIdentity() {
14 | }
15 |
16 | public Long getId() {
17 | return id;
18 | }
19 |
20 | public void setId(Long id) {
21 | this.id = id;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/id/GeneratedIdentityIdentity.java:
--------------------------------------------------------------------------------
1 | package chapter04.id;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class GeneratedIdentityIdentity {
7 | @Id
8 | @GeneratedValue(strategy = GenerationType.IDENTITY)
9 | Long id;
10 | @Column
11 | String value;
12 |
13 | public GeneratedIdentityIdentity() {
14 | }
15 |
16 | public Long getId() {
17 | return id;
18 | }
19 |
20 | public void setId(Long id) {
21 | this.id = id;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/id/GeneratedSequenceIdentity.java:
--------------------------------------------------------------------------------
1 | package chapter04.id;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class GeneratedSequenceIdentity {
7 | @Id
8 | @GeneratedValue(strategy = GenerationType.SEQUENCE)
9 | Long id;
10 | @Column
11 | String value;
12 |
13 | public GeneratedSequenceIdentity() {
14 | }
15 |
16 | public Long getId() {
17 | return id;
18 | }
19 |
20 | public void setId(Long id) {
21 | this.id = id;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/id/GeneratedTableIdentity.java:
--------------------------------------------------------------------------------
1 | package chapter04.id;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class GeneratedTableIdentity {
7 | @Id
8 | @GeneratedValue(strategy = GenerationType.TABLE)
9 | Long id;
10 | @Column
11 | String value;
12 |
13 | public GeneratedTableIdentity() {
14 | }
15 |
16 | public Long getId() {
17 | return id;
18 | }
19 |
20 | public void setId(Long id) {
21 | this.id = id;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/id/NongeneratedIdentity.java:
--------------------------------------------------------------------------------
1 | package chapter04.id;
2 |
3 | import javax.persistence.Column;
4 | import javax.persistence.Entity;
5 | import javax.persistence.Id;
6 |
7 | @Entity
8 | public class NongeneratedIdentity {
9 | @Id
10 | Long id;
11 | @Column
12 | String value;
13 |
14 | public NongeneratedIdentity() {
15 | }
16 |
17 | public Long getId() {
18 | return id;
19 | }
20 |
21 | public void setId(Long id) {
22 | this.id = id;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/id/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/mapped/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/model/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/orphan/Book.java:
--------------------------------------------------------------------------------
1 | package chapter04.orphan;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | public class Book {
7 | @Id
8 | @GeneratedValue(strategy = GenerationType.AUTO)
9 | Long id;
10 | @Column
11 | String title;
12 | @ManyToOne
13 | Library library;
14 |
15 | public Book() {
16 | }
17 |
18 | public Long getId() {
19 | return id;
20 | }
21 |
22 | public void setId(Long id) {
23 | this.id = id;
24 | }
25 |
26 | public String getTitle() {
27 | return title;
28 | }
29 |
30 | public void setTitle(String title) {
31 | this.title = title;
32 | }
33 |
34 | public Library getLibrary() {
35 | return library;
36 | }
37 |
38 | public void setLibrary(Library library) {
39 | this.library = library;
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/orphan/Library.java:
--------------------------------------------------------------------------------
1 | package chapter04.orphan;
2 |
3 | import javax.persistence.*;
4 | import java.util.ArrayList;
5 | import java.util.List;
6 |
7 | @Entity
8 | public class Library {
9 | @Id
10 | @GeneratedValue(strategy = GenerationType.AUTO)
11 | Long id;
12 | @Column
13 | String name;
14 | @OneToMany(orphanRemoval = true, mappedBy = "library")
15 | List books = new ArrayList<>();
16 |
17 | public Library() {
18 | }
19 |
20 | public Long getId() {
21 | return id;
22 | }
23 |
24 | public void setId(Long id) {
25 | this.id = id;
26 | }
27 |
28 | public String getName() {
29 | return name;
30 | }
31 |
32 | public void setName(String name) {
33 | this.name = name;
34 | }
35 |
36 | public List getBooks() {
37 | return books;
38 | }
39 |
40 | public void setBooks(List books) {
41 | this.books = books;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/chapter04/orphan/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/broken/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/general/ValidateSimpleObject.java:
--------------------------------------------------------------------------------
1 | package chapter04.general;
2 |
3 | import chapter04.model.SimpleObject;
4 | import com.autumncode.hibernate.util.SessionUtil;
5 | import org.hibernate.Session;
6 |
7 | import static org.testng.Assert.assertEquals;
8 |
9 | public class ValidateSimpleObject {
10 | public static SimpleObject validate(
11 | Long id,
12 | Long expectedValue,
13 | String expectedKey) {
14 | SimpleObject so = null;
15 | try (Session session = SessionUtil.getSession()) {
16 | // will throw an Exception if the id isn't found
17 | // in the database
18 | so = session.load(SimpleObject.class, id);
19 |
20 | assertEquals(so.getKey(), expectedKey);
21 | assertEquals(so.getValue(), expectedValue);
22 | }
23 |
24 | return so;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/general/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/id/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/mapped/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/chapter04/orphan/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter04/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter05/README.txt:
--------------------------------------------------------------------------------
1 | Chapter 5's project is empty, mostly because Chapter 5 was focused
2 | almost entirely on mapping concepts and not on actual coding
3 | practices; the few places where coding would be appropriate have
4 | already been shown in prior chapters.
--------------------------------------------------------------------------------
/chapter05/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter05/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | hibernate-6-parent
7 | com.autumncode.books.hibernate
8 | 5.0
9 |
10 | 4.0.0
11 | chapter05
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/chapter06/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | hibernate-6-parent
7 | com.autumncode.books.hibernate
8 | 5.0
9 |
10 | 4.0.0
11 | chapter06
12 |
13 |
14 |
15 | com.autumncode.books.hibernate
16 | util
17 | ${project.version}
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/chapter06/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/compoundpk/CPKBook.java:
--------------------------------------------------------------------------------
1 | package chapter06.compoundpk;
2 |
3 | import javax.persistence.Column;
4 | import javax.persistence.Entity;
5 | import javax.persistence.Id;
6 |
7 | @Entity
8 | public class CPKBook {
9 | @Id
10 | ISBN id;
11 | @Column
12 | String name;
13 |
14 | public CPKBook() {
15 | }
16 |
17 | public ISBN getId() {
18 | return id;
19 | }
20 |
21 | public void setId(ISBN id) {
22 | this.id = id;
23 | }
24 |
25 | public String getName() {
26 | return name;
27 | }
28 |
29 | public void setName(String title) {
30 | this.name = title;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/compoundpk/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/embedded/Author.java:
--------------------------------------------------------------------------------
1 | package chapter06.embedded;
2 |
3 | import javax.persistence.Embeddable;
4 | import java.time.LocalDate;
5 |
6 | @Embeddable
7 | public class Author {
8 | String name;
9 | LocalDate dateOfBirth;
10 | }
11 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/embedded/EBook.java:
--------------------------------------------------------------------------------
1 | package chapter06.embedded;
2 |
3 | import javax.persistence.ElementCollection;
4 | import javax.persistence.Entity;
5 | import javax.persistence.GeneratedValue;
6 | import javax.persistence.Id;
7 | import java.util.Set;
8 |
9 | @Entity
10 | public class EBook {
11 | @Id
12 | @GeneratedValue
13 | Long id;
14 | String name;
15 | @ElementCollection
16 | Set authors;
17 | }
18 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/embedded/User.java:
--------------------------------------------------------------------------------
1 | package chapter06.embedded;
2 |
3 | import javax.persistence.ElementCollection;
4 | import javax.persistence.Entity;
5 | import javax.persistence.GeneratedValue;
6 | import javax.persistence.Id;
7 | import java.util.List;
8 |
9 | @Entity
10 | public class User {
11 | @Id
12 | @GeneratedValue
13 | Long id;
14 | String name;
15 | // this is... not wise from a security perspective
16 | String password;
17 | @ElementCollection
18 | List passwordHints;
19 | }
20 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/embedded/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/joined/Book.java:
--------------------------------------------------------------------------------
1 | package chapter06.joined;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity(name="JoinedBook")
6 | @Inheritance(strategy = InheritanceType.JOINED)
7 | public class Book {
8 | // contents common to all Books go here
9 | @Id
10 | Long bookId;
11 | String title;
12 | // imagine many more
13 | }
14 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/joined/ComputerBook.java:
--------------------------------------------------------------------------------
1 | package chapter06.joined;
2 |
3 | import javax.persistence.Entity;
4 |
5 | @Entity(name="JoinedCBook")
6 | public class ComputerBook extends Book{
7 | String primaryLanguage;
8 | }
9 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/joined/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/mapped/Book.java:
--------------------------------------------------------------------------------
1 | package chapter06.mapped;
2 |
3 |
4 | import javax.persistence.GeneratedValue;
5 | import javax.persistence.Id;
6 | import javax.persistence.MappedSuperclass;
7 |
8 | @MappedSuperclass
9 | public class Book {
10 | @Id
11 | @GeneratedValue
12 | Integer id;
13 | String name;
14 |
15 | public Book() {
16 | }
17 |
18 | public Integer getId() {
19 | return id;
20 | }
21 |
22 | public void setId(Integer id) {
23 | this.id = id;
24 | }
25 |
26 | public String getName() {
27 | return name;
28 | }
29 |
30 | public void setName(String name) {
31 | this.name = name;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/mapped/ComputerBook.java:
--------------------------------------------------------------------------------
1 | package chapter06.mapped;
2 |
3 | import javax.persistence.Entity;
4 |
5 | @Entity
6 | public class ComputerBook extends Book {
7 | String language;
8 |
9 | public ComputerBook() {
10 | }
11 |
12 | public String getLanguage() {
13 | return language;
14 | }
15 |
16 | public void setLanguage(String language) {
17 | this.language = language;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/mapped/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/naturalid/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/perclass/Book.java:
--------------------------------------------------------------------------------
1 | package chapter06.perclass;
2 |
3 | import javax.persistence.Entity;
4 | import javax.persistence.Id;
5 | import javax.persistence.Inheritance;
6 | import javax.persistence.InheritanceType;
7 |
8 | @Entity(name="PerClassBook")
9 | @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
10 | public class Book {
11 | // contents common to all Books go here
12 | @Id
13 | Long bookId;
14 | String title;
15 | // imagine many more
16 | }
17 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/perclass/ComputerBook.java:
--------------------------------------------------------------------------------
1 | package chapter06.perclass;
2 |
3 | import javax.persistence.Entity;
4 |
5 | @Entity(name="PerClassCBook")
6 | public class ComputerBook extends Book {
7 | String primaryLanguage;
8 | }
9 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/perclass/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/primarykey/after/Book.java:
--------------------------------------------------------------------------------
1 | package chapter06.primarykey.after;
2 |
3 | import javax.persistence.Entity;
4 | import javax.persistence.GeneratedValue;
5 | import javax.persistence.Id;
6 |
7 | @Entity
8 | public class Book {
9 | String title;
10 | int pages;
11 | @Id
12 | @GeneratedValue()
13 | int id;
14 |
15 | public Book() {
16 | }
17 |
18 | public String getTitle() {
19 | return title;
20 | }
21 |
22 | public void setTitle(String title) {
23 | this.title = title;
24 | }
25 |
26 | public int getPages() {
27 | return pages;
28 | }
29 |
30 | public void setPages(int pages) {
31 | this.pages = pages;
32 | }
33 |
34 | public int getId() {
35 | return id;
36 | }
37 |
38 | public void setId(int id) {
39 | this.id = id;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/primarykey/after/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/primarykey/before/Book.java:
--------------------------------------------------------------------------------
1 | package chapter06.primarykey.before;
2 |
3 | public class Book {
4 | String title;
5 | int pages;
6 | int id;
7 |
8 | public Book() {
9 | }
10 |
11 | public String getTitle() {
12 | return title;
13 | }
14 |
15 | public void setTitle(String title) {
16 | this.title = title;
17 | }
18 |
19 | public int getPages() {
20 | return pages;
21 | }
22 |
23 | public void setPages(int pages) {
24 | this.pages = pages;
25 | }
26 |
27 | public int getId() {
28 | return id;
29 | }
30 |
31 | public void setId(int id) {
32 | this.id = id;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/primarykey/before/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/primarykey/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/single/Book.java:
--------------------------------------------------------------------------------
1 | package chapter06.single;
2 |
3 | import javax.persistence.Entity;
4 | import javax.persistence.Id;
5 | import javax.persistence.Inheritance;
6 | import javax.persistence.InheritanceType;
7 |
8 | @Entity(name="SingleBook")
9 | @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
10 | public class Book {
11 | // contents common to all Books go here
12 | @Id
13 | Long bookId;
14 | String title;
15 | // imagine many more
16 | }
17 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/single/ComputerBook.java:
--------------------------------------------------------------------------------
1 | package chapter06.single;
2 |
3 | import javax.persistence.Entity;
4 |
5 | @Entity(name="SingleCBook")
6 | public class ComputerBook extends Book {
7 | String primaryLanguage;
8 | }
9 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/single/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/twotables/Customer.java:
--------------------------------------------------------------------------------
1 | package chapter06.twotables;
2 |
3 | import javax.persistence.*;
4 |
5 | @Entity
6 | @Table(
7 | name = "customer",
8 | uniqueConstraints = {@UniqueConstraint(columnNames = "name")}
9 | )
10 | @SecondaryTable(name = "customer_details")
11 | public class Customer {
12 | @Id
13 | public int id;
14 | public String name;
15 | @Column(table = "customer_details")
16 | public String address;
17 |
18 | public Customer() {
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/chapter06/twotables/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/java/chapter06/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/java/chapter06/naturalid/IdTestSimple.java:
--------------------------------------------------------------------------------
1 | package chapter06.naturalid;
2 |
3 | import com.autumncode.hibernate.util.SessionUtil;
4 | import org.hibernate.Session;
5 | import org.hibernate.Transaction;
6 | import org.testng.annotations.Test;
7 |
8 | import static org.testng.Assert.assertEquals;
9 | import static org.testng.Assert.assertNotNull;
10 |
11 | public class IdTestSimple extends IdTestBase {
12 | @Test
13 | public void testSimpleNaturalId() {
14 | Integer id = createSimpleEmployee("Sorhed", 5401).getId();
15 |
16 | try (Session session = SessionUtil.getSession()) {
17 | Transaction tx = session.beginTransaction();
18 |
19 | SimpleNaturalIdEmployee employee =
20 | session
21 | .byId(SimpleNaturalIdEmployee.class)
22 | .load(id);
23 | assertNotNull(employee);
24 | SimpleNaturalIdEmployee badgedEmployee =
25 | session
26 | .bySimpleNaturalId(SimpleNaturalIdEmployee.class)
27 | .load(5401);
28 | assertEquals(badgedEmployee, employee);
29 |
30 | tx.commit();
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/chapter06/src/test/java/chapter06/naturalid/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/java/chapter06/primarykey/BookTest.java:
--------------------------------------------------------------------------------
1 | package chapter06.primarykey;
2 |
3 | import com.autumncode.hibernate.util.SessionUtil;
4 | import org.hibernate.Session;
5 | import org.testng.annotations.Test;
6 |
7 | import static org.testng.Assert.assertNotNull;
8 |
9 | public class BookTest {
10 | @Test
11 | public void bookTest() {
12 | try (Session session = SessionUtil.getSession()) {
13 | assertNotNull(session);
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/chapter06/src/test/java/chapter06/primarykey/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter06/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter07/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/lifecycle/FailingEntity.java:
--------------------------------------------------------------------------------
1 | package chapter07.lifecycle;
2 |
3 | import lombok.*;
4 |
5 | import javax.persistence.*;
6 |
7 | @Entity
8 | @ToString
9 | @NoArgsConstructor
10 | @Data
11 | @EqualsAndHashCode
12 | public class FailingEntity {
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.AUTO)
15 | Integer id;
16 | FailureStatus failureStatus = null;
17 | String value;
18 |
19 | static enum FailureStatus {
20 | NOFAILURE, PREPERSIST, POSTPERSIST, POSTLOAD
21 | }
22 |
23 | @PrePersist
24 | void prePersist() {
25 | if (failureStatus.equals(FailureStatus.PREPERSIST)) {
26 | throw new RuntimeException("prepersist failure");
27 | }
28 | }
29 |
30 | @PostPersist
31 | void postPersist() {
32 | if (failureStatus.equals(FailureStatus.POSTPERSIST)) {
33 | throw new RuntimeException("postpersist failure");
34 | }
35 | }
36 |
37 | @PostLoad
38 | void postLoad() {
39 | if (failureStatus.equals(FailureStatus.POSTLOAD)) {
40 | throw new RuntimeException("postload failure");
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/lifecycle/UserAccount.java:
--------------------------------------------------------------------------------
1 | package chapter07.lifecycle;
2 |
3 | import lombok.*;
4 |
5 | import javax.persistence.*;
6 |
7 | @Entity
8 | @NoArgsConstructor
9 | @Data
10 | @EntityListeners({UserAccountListener.class})
11 | public class UserAccount {
12 | @Id
13 | @GeneratedValue(strategy = GenerationType.AUTO)
14 | Integer id;
15 | String name;
16 | @Transient
17 | String password;
18 | Integer salt;
19 | Integer passwordHash;
20 |
21 | public boolean validPassword(String newPass) {
22 | return newPass.hashCode() * salt == getPasswordHash();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/lifecycle/UserAccountListener.java:
--------------------------------------------------------------------------------
1 | package chapter07.lifecycle;
2 |
3 | import javax.persistence.PrePersist;
4 |
5 | public class UserAccountListener {
6 | @PrePersist
7 | void setPasswordHash(Object o) {
8 | UserAccount ua = (UserAccount) o;
9 | if (ua.getSalt() == null || ua.getSalt() == 0) {
10 | ua.setSalt((int) (Math.random() * 65535));
11 | }
12 | ua.setPasswordHash(
13 | ua.getPassword().hashCode() * ua.getSalt()
14 | );
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/lifecycle/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/unvalidated/UnvalidatedSimplePerson.java:
--------------------------------------------------------------------------------
1 | package chapter07.unvalidated;
2 |
3 | import lombok.Data;
4 |
5 | import javax.persistence.*;
6 |
7 | @Entity
8 | @Data
9 | public class UnvalidatedSimplePerson {
10 | @Id
11 | @GeneratedValue(strategy = GenerationType.IDENTITY)
12 | Long id;
13 | @Column
14 | String fname;
15 | @Column
16 | String lname;
17 | @Column
18 | Integer age;
19 | }
20 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/unvalidated/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/validated/Coordinate.java:
--------------------------------------------------------------------------------
1 | package chapter07.validated;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import javax.persistence.Entity;
9 | import javax.persistence.GeneratedValue;
10 | import javax.persistence.GenerationType;
11 | import javax.persistence.Id;
12 | import javax.validation.constraints.NotNull;
13 |
14 | @Entity
15 | @Data
16 | @Builder
17 | @NoArgsConstructor
18 | @AllArgsConstructor
19 | @NoQuadrantIII
20 | public class Coordinate {
21 | @Id
22 | @GeneratedValue(strategy = GenerationType.AUTO)
23 | Integer id;
24 | @NotNull
25 | Integer x;
26 | @NotNull
27 | Integer y;
28 | }
29 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/validated/NoQuadrantIII.java:
--------------------------------------------------------------------------------
1 | package chapter07.validated;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.*;
6 |
7 | @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
8 | @Retention(RetentionPolicy.RUNTIME)
9 | @Constraint(validatedBy = {QuadrantIIIValidator.class})
10 | @Documented
11 | public @interface NoQuadrantIII {
12 | String message() default "Failed quadrant III test";
13 |
14 | Class>[] groups() default {};
15 |
16 | Class extends Payload>[] payload() default {};
17 | }
18 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/validated/QuadrantIIIValidator.java:
--------------------------------------------------------------------------------
1 | package chapter07.validated;
2 |
3 | import javax.validation.ConstraintValidator;
4 | import javax.validation.ConstraintValidatorContext;
5 |
6 | public class QuadrantIIIValidator
7 | implements ConstraintValidator {
8 | @Override
9 | public void initialize(NoQuadrantIII constraintAnnotation) {
10 | }
11 |
12 | @Override
13 | public boolean isValid(
14 | Coordinate value,
15 | ConstraintValidatorContext context
16 | ) {
17 | return !(value.getX() < 0 && value.getY() < 0);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/validated/ValidatedPerson.java:
--------------------------------------------------------------------------------
1 | package chapter07.validated;
2 |
3 | import lombok.*;
4 |
5 | import javax.persistence.*;
6 | import javax.validation.constraints.Min;
7 | import javax.validation.constraints.NotNull;
8 | import javax.validation.constraints.Size;
9 |
10 | @Entity
11 | @Data
12 | @Builder
13 | @AllArgsConstructor(access = AccessLevel.PACKAGE)
14 | @NoArgsConstructor
15 | public class ValidatedPerson {
16 | @Id
17 | @GeneratedValue(strategy = GenerationType.IDENTITY)
18 | Long id;
19 | @Column
20 | @NotNull
21 | @Size(min = 2, max = 60)
22 | String fname;
23 | @Column
24 | @NotNull
25 | @Size(min = 2, max = 60)
26 | String lname;
27 | @Column
28 | @Min(value = 13)
29 | Integer age;
30 | }
31 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/chapter07/validated/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/java/chapter07/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/java/chapter07/lifecycle/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/java/chapter07/validator/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/resources/META-INF/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 | chapter07.lifecycle.LifecycleThing
7 | chapter07.lifecycle.UserAccount
8 | chapter07.lifecycle.FailingEntity
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/chapter07/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter07/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter08/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/ignite/README.txt:
--------------------------------------------------------------------------------
1 | This is Apache Ignite working directory that contains information that
2 | Ignite nodes need in order to function normally.
3 | Don't delete it unless you're sure you know what you're doing.
4 |
5 | You can change the location of working directory with
6 | igniteConfiguration.setWorkDirectory(location) or
7 | in IgniteConfiguration .
8 |
--------------------------------------------------------------------------------
/chapter08/ignite/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/-1371708859.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.jdbc.IntegerTypeDescriptor
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/-1506295794.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.java.ImmutableMutabilityPlan
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/-504747370.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.sql.IntegerTypeDescriptor
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/-521783090.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.cache.internal.CacheKeyImplementation
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/1030255148.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.java.IntegerTypeDescriptor
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/1858680314.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.internal.util.compare.ComparableComparator
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/250465742.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.engine.jdbc.Size
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/269083043.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/269083044.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$2
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/337622557.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.cache.spi.entry.StandardCacheEntryImpl
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/342747538.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.jdbc.IntegerTypeDescriptor$1
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/342747539.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.descriptor.jdbc.IntegerTypeDescriptor$2
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/358768682.classname0:
--------------------------------------------------------------------------------
1 | org.hibernate.type.IntegerType
--------------------------------------------------------------------------------
/chapter08/ignite/work/db/marshaller/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/ignite/work/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/ignite/work/diagnostic/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/main/java/chapter08/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/main/java/chapter08/model/Publisher.java:
--------------------------------------------------------------------------------
1 | package chapter08.model;
2 |
3 | import lombok.Data;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.GeneratedValue;
7 | import javax.persistence.GenerationType;
8 | import javax.persistence.Id;
9 |
10 | @Entity
11 | @Data
12 | public class Publisher {
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.AUTO)
15 | Long id;
16 | String name;
17 | }
18 |
--------------------------------------------------------------------------------
/chapter08/src/main/java/chapter08/model/Subscriber.java:
--------------------------------------------------------------------------------
1 | package chapter08.model;
2 |
3 | import lombok.Data;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.GeneratedValue;
7 | import javax.persistence.GenerationType;
8 | import javax.persistence.Id;
9 |
10 | @Entity
11 | @Data
12 | public class Subscriber {
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.AUTO)
15 | Long id;
16 | String name;
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/chapter08/src/main/java/chapter08/model/Supplier.java:
--------------------------------------------------------------------------------
1 | package chapter08.model;
2 |
3 | import lombok.Data;
4 | import org.hibernate.annotations.Cache;
5 | import org.hibernate.annotations.CacheConcurrencyStrategy;
6 |
7 | import javax.persistence.*;
8 | import java.io.Serializable;
9 |
10 | @Entity
11 | @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
12 | @Data
13 | public class Supplier implements Serializable {
14 | @Id
15 | @GeneratedValue(strategy = GenerationType.AUTO)
16 | Integer id;
17 | @Column(unique = true)
18 | String name;
19 |
20 | public Supplier(String name) {
21 | this.name = name;
22 | }
23 |
24 | public Supplier() {
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/chapter08/src/main/java/chapter08/model/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/test/java/chapter08/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/test/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/test/resources/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter08/src/test/resources/ehcache.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 | java.lang.String
10 | java.lang.String
11 |
12 | 20
13 | 10
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/chapter08/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
8 | %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
9 |
10 |
11 |
12 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chapter09/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/main/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/main/java/chapter09/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/main/java/chapter09/model/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/main/java/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/test/desktop.ini:
--------------------------------------------------------------------------------
1 | [ . S h e l l C l a s s I n f o ]
2 | C o n f i r m F i l e O p = 0
3 | I c o n R e s o u r c e = C : \ P r o g r a m F i l e s \ G o o g l e \ D r i v e F i l e S t r e a m \ 5 1 . 0 . 1 6 . 0 \ G o o g l e D r i v e F S . e x e , 2 3
4 |
--------------------------------------------------------------------------------
/chapter09/src/test/java/chapter09/TestBiggerProjection.java:
--------------------------------------------------------------------------------
1 | package chapter09;
2 |
3 | import org.hibernate.query.Query;
4 | import org.testng.annotations.Test;
5 |
6 | import java.util.Arrays;
7 | import java.util.List;
8 |
9 | import static org.testng.Assert.assertEquals;
10 |
11 | public class TestBiggerProjection extends TestBase {
12 | @Test
13 | public void testBiggerProjection() {
14 | Query