├── .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 | ![Cover image](9781484273364.jpg) 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/main/java/chapter01/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/main/java/chapter01/hibernate/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/test/java/chapter01/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/test/java/chapter01/hibernate/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/test/java/chapter01/jdbc/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter01/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/main/java/chapter02/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/main/java/chapter02/hibernate/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/test/java/chapter02/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/test/java/chapter02/hibernate/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter02/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/main/java/chapter03/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/test/java/chapter03/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter03/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/main/java/chapter04/broken/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/main/java/chapter04/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/main/java/chapter04/mapped/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/main/java/chapter04/model/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/java/chapter04/broken/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/java/chapter04/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/java/chapter04/id/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/java/chapter04/mapped/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/java/chapter04/orphan/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter04/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/main/java/chapter06/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/main/java/chapter06/naturalid/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/main/java/chapter06/primarykey/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/test/java/chapter06/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter06/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/main/java/chapter07/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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[] 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/test/java/chapter07/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/test/java/chapter07/lifecycle/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/test/java/chapter07/validator/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter07/src/test/resources/META-INF/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/ignite/work/db/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/ignite/work/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/ignite/work/diagnostic/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/main/java/chapter08/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/test/java/chapter08/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter08/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/main/java/chapter09/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/main/java/chapter09/model/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 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 query = session.createQuery( 15 | "select p.name, p.price from Product p"); 16 | List products = query.list(); 17 | for (Object[] data : products) { 18 | System.out.println(Arrays.toString(data)); 19 | } 20 | assertEquals(products.size(), 5); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestJoinArray.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import chapter09.model.Product; 4 | import chapter09.model.Supplier; 5 | import org.hibernate.query.Query; 6 | import org.testng.Assert; 7 | import org.testng.annotations.Test; 8 | 9 | import java.util.List; 10 | 11 | import static org.testng.Assert.assertEquals; 12 | 13 | public class TestJoinArray extends TestBase { 14 | @Test 15 | public void testJoinArray() { 16 | Query query = session.getNamedQuery( 17 | "product.findProductAndSupplier" 18 | ); 19 | List suppliers = query.list(); 20 | for (Object[] o : suppliers) { 21 | Assert.assertTrue(o[0] instanceof Product); 22 | Assert.assertTrue(o[1] instanceof Supplier); 23 | } 24 | assertEquals(suppliers.size(), 5); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestNamedEntity.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import chapter09.model.Product; 4 | import chapter09.model.Supplier; 5 | import org.hibernate.query.Query; 6 | import org.testng.annotations.Test; 7 | 8 | import java.util.List; 9 | 10 | import static org.testng.Assert.assertEquals; 11 | import static org.testng.Assert.assertNotNull; 12 | 13 | public class TestNamedEntity extends TestBase { 14 | @Test 15 | public void testNamedEntity() { 16 | Query supplierQuery=session.createQuery( 17 | "from Supplier where name=:name", 18 | Supplier.class); 19 | supplierQuery.setParameter("name", "Supplier 2"); 20 | Supplier supplier= supplierQuery.getSingleResult(); 21 | assertNotNull(supplier); 22 | 23 | Query query = session.createQuery( 24 | "from Product where supplier = :supplier", 25 | Product.class); 26 | query.setParameter("supplier", supplier); 27 | 28 | List products = query.list(); 29 | assertEquals(products.size(), 3); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestNamedParams.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import chapter09.model.Product; 4 | import org.hibernate.query.Query; 5 | import org.testng.annotations.Test; 6 | 7 | import java.util.List; 8 | 9 | import static org.testng.Assert.assertEquals; 10 | 11 | public class TestNamedParams extends TestBase { 12 | @Test 13 | public void testNamedParams() { 14 | Query query = session.createQuery( 15 | "from Product where price >= :price", 16 | Product.class); 17 | query.setParameter("price",25.0); 18 | List products = query.list(); 19 | assertEquals(products.size(), 1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestNamedQuery.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import chapter09.model.Supplier; 4 | import org.hibernate.query.Query; 5 | import org.testng.annotations.Test; 6 | 7 | import java.util.List; 8 | 9 | import static org.testng.Assert.assertEquals; 10 | 11 | public class TestNamedQuery extends TestBase{ 12 | @Test 13 | public void testNamedQuery() { 14 | Query query = session.getNamedQuery("supplier.findAll"); 15 | List suppliers = query.list(); 16 | assertEquals(suppliers.size(), 2); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestNativeQuery.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 TestNativeQuery extends TestBase { 12 | @Test 13 | public void testNativeQuery() { 14 | Query query = session.getNamedQuery("supplier.findAverage"); 15 | List suppliers = query.list(); 16 | for (Object[] o : suppliers) { 17 | System.out.println(Arrays.toString(o)); 18 | } 19 | assertEquals(suppliers.size(), 2); 20 | } 21 | 22 | @Test 23 | public void testHSQLAggregate() { 24 | Query query = session.getNamedQuery("supplier.averagePrice"); 25 | List suppliers = query.list(); 26 | for (Object[] o : suppliers) { 27 | System.out.println(Arrays.toString(o)); 28 | } 29 | assertEquals(suppliers.size(), 2); 30 | } 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestSimpleProjection.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import org.hibernate.query.Query; 4 | import org.testng.annotations.Test; 5 | 6 | import java.util.List; 7 | 8 | import static org.testng.Assert.assertEquals; 9 | 10 | public class TestSimpleProjection extends TestBase { 11 | @Test 12 | public void testSimpleProjection() { 13 | Query query = session.createQuery( 14 | "select p.name from Product p", 15 | String.class); 16 | List suppliers = query.list(); 17 | for (String s : suppliers) { 18 | System.out.println(s); 19 | } 20 | assertEquals(suppliers.size(), 5); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestSimpleQuery.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import chapter09.model.Product; 4 | import org.hibernate.query.Query; 5 | import org.testng.annotations.Test; 6 | 7 | import java.util.List; 8 | 9 | import static org.testng.Assert.assertEquals; 10 | 11 | public class TestSimpleQuery extends TestBase{ 12 | @Test 13 | public void testSimpleQuery() { 14 | Query query = session.createQuery( 15 | "from Product", 16 | Product.class); 17 | 18 | query.setComment("This is only a query for product"); 19 | List products = query.list(); 20 | assertEquals(products.size(), 5); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/TestSingleResult.java: -------------------------------------------------------------------------------- 1 | package chapter09; 2 | 3 | import chapter09.model.Product; 4 | import org.hibernate.NonUniqueResultException; 5 | import org.hibernate.query.Query; 6 | import org.testng.annotations.Test; 7 | 8 | 9 | public class TestSingleResult extends TestBase { 10 | @Test(expectedExceptions = NonUniqueResultException.class) 11 | public void testGetSingleResultBad() { 12 | Query query = session.createQuery( 13 | "from Product", 14 | Product.class); 15 | 16 | Product products = query.getSingleResult(); 17 | } 18 | 19 | @Test 20 | public void testGetSingleResultGood() { 21 | Query query = session.createQuery( 22 | "from Product", 23 | Product.class); 24 | query.setMaxResults(1); 25 | Product products = query.getSingleResult(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chapter09/src/test/java/chapter09/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter09/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 | -------------------------------------------------------------------------------- /chapter10/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | hibernate-6-parent 7 | com.autumncode.books.hibernate 8 | 5.0 9 | 10 | 4.0.0 11 | chapter10 12 | 13 | 14 | 15 | com.autumncode.books.hibernate 16 | util 17 | ${project.parent.version} 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /chapter10/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/main/java/chapter10/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/main/java/chapter10/model/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/main/java/chapter10/userrole/Role1.java: -------------------------------------------------------------------------------- 1 | package chapter10.userrole; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | import javax.persistence.*; 7 | import javax.persistence.Entity; 8 | 9 | @Entity 10 | @Data 11 | @NoArgsConstructor 12 | 13 | public class Role1 { 14 | @Id 15 | @GeneratedValue(strategy = GenerationType.AUTO) 16 | Integer id; 17 | @Column(unique = true) 18 | String name; 19 | 20 | public Role1(String name) { 21 | this.name=name; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chapter10/src/main/java/chapter10/userrole/User1.java: -------------------------------------------------------------------------------- 1 | package chapter10.userrole; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | import javax.persistence.*; 7 | import javax.persistence.Entity; 8 | import java.util.Set; 9 | 10 | @Entity 11 | @Data 12 | @NoArgsConstructor 13 | public class User1 { 14 | @Id 15 | @GeneratedValue(strategy = GenerationType.AUTO) 16 | Integer id; 17 | @Column(unique = true) 18 | String name; 19 | boolean active; 20 | @ManyToMany 21 | Set roles; 22 | 23 | public User1(String name, boolean active) { 24 | this.name = name; 25 | this.active = active; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /chapter10/src/main/java/chapter10/userrole/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/test/java/chapter10/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/test/java/chapter10/first/TestNoFilter.java: -------------------------------------------------------------------------------- 1 | package chapter10.first; 2 | 3 | import chapter10.model.User; 4 | import com.autumncode.hibernate.util.SessionUtil; 5 | import org.hibernate.query.Query; 6 | import org.testng.annotations.Test; 7 | 8 | import java.util.List; 9 | 10 | import static org.testng.Assert.assertEquals; 11 | 12 | public class TestNoFilter extends TestBase { 13 | @Test 14 | public void testSimpleQuery() { 15 | SessionUtil.doWithSession((session) -> { 16 | Query query = session.createQuery("from User", User.class); 17 | List users = query.list(); 18 | assertEquals(users.size(), 4); 19 | }); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter10/src/test/java/chapter10/first/TestParameterFilter.java: -------------------------------------------------------------------------------- 1 | package chapter10.first; 2 | 3 | import chapter10.model.User; 4 | import com.autumncode.hibernate.util.SessionUtil; 5 | import org.hibernate.query.Query; 6 | import org.testng.annotations.DataProvider; 7 | import org.testng.annotations.Test; 8 | 9 | import java.util.List; 10 | 11 | import static org.testng.Assert.assertEquals; 12 | 13 | public class TestParameterFilter extends TestBase { 14 | @DataProvider 15 | Object[][] statuses() { 16 | return new Object[][]{ 17 | {true, 3}, 18 | {false, 1} 19 | }; 20 | } 21 | 22 | @Test(dataProvider = "statuses") 23 | public void testFilter(boolean status, int count) { 24 | SessionUtil.doWithSession((session) -> { 25 | Query query = session.createQuery("from User", User.class); 26 | 27 | session 28 | .enableFilter("byStatus") 29 | .setParameter("status", status); 30 | 31 | List users = query.list(); 32 | assertEquals(users.size(), count); 33 | }); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chapter10/src/test/java/chapter10/first/TestSimpleFilter.java: -------------------------------------------------------------------------------- 1 | package chapter10.first; 2 | 3 | import chapter10.model.User; 4 | import com.autumncode.hibernate.util.SessionUtil; 5 | import org.hibernate.query.Query; 6 | import org.testng.annotations.Test; 7 | 8 | import java.util.List; 9 | 10 | import static org.testng.Assert.assertEquals; 11 | 12 | public class TestSimpleFilter extends TestBase { 13 | @Test 14 | public void testNoParameterFilter() { 15 | SessionUtil.doWithSession((session) -> { 16 | Query query = session.createQuery("from User", User.class); 17 | 18 | session.enableFilter("userEndsWith1"); 19 | List users = query.list(); 20 | assertEquals(users.size(), 1); 21 | assertEquals(users.get(0).getName(), "user1"); 22 | }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chapter10/src/test/java/chapter10/first/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter10/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 | -------------------------------------------------------------------------------- /chapter11/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/dto/CommentDTO.java: -------------------------------------------------------------------------------- 1 | package chapter11.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.time.LocalDateTime; 6 | 7 | @Data 8 | public class CommentDTO { 9 | String user; 10 | String content; 11 | LocalDateTime createdDate; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/dto/PostDTO.java: -------------------------------------------------------------------------------- 1 | package chapter11.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.time.LocalDateTime; 6 | import java.util.List; 7 | 8 | @Data 9 | public class PostDTO { 10 | int id; 11 | String user; 12 | String title; 13 | String content; 14 | List comments=List.of(); 15 | LocalDateTime createdDate; 16 | } 17 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/dto/UserDTO.java: -------------------------------------------------------------------------------- 1 | package chapter11.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserDTO { 7 | int id; 8 | String name; 9 | boolean active; 10 | 11 | public UserDTO() { 12 | } 13 | 14 | public UserDTO( 15 | int id, 16 | String name, 17 | boolean active 18 | ) { 19 | this.id = id; 20 | this.name = name; 21 | this.active = active; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/dto/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/model/Comment.java: -------------------------------------------------------------------------------- 1 | package chapter11.model; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | import javax.persistence.*; 7 | import java.time.LocalDateTime; 8 | 9 | @Entity 10 | @Data 11 | @NoArgsConstructor 12 | public class Comment { 13 | @Id 14 | @GeneratedValue(strategy = GenerationType.AUTO) 15 | Integer id; 16 | 17 | @Column(nullable = false) 18 | @Lob 19 | String content; 20 | 21 | @ManyToOne(fetch = FetchType.LAZY) 22 | @JoinColumn(name = "post_id") 23 | Post post; 24 | 25 | @ManyToOne(optional = false, fetch = FetchType.LAZY) 26 | @JoinColumn(name = "user_id") 27 | User user; 28 | 29 | @Temporal(TemporalType.TIMESTAMP) 30 | @Column(nullable = false) 31 | LocalDateTime createDate; 32 | 33 | @Override 34 | public String toString() { 35 | return "Comment{" + 36 | "id=" + id + 37 | ", content='" + content + '\'' + 38 | ", createDate=" + createDate + 39 | '}'; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/model/User.java: -------------------------------------------------------------------------------- 1 | package chapter11.model; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | import javax.persistence.*; 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Entity 11 | @Data 12 | @NoArgsConstructor 13 | public class User { 14 | @Id 15 | @GeneratedValue(strategy = GenerationType.AUTO) 16 | Integer id; 17 | 18 | @Column(unique = true, nullable = false) 19 | String name; 20 | boolean active; 21 | 22 | @OneToMany(fetch = FetchType.LAZY) 23 | @JoinColumn(name = "user_id") 24 | @OrderBy("createDate") 25 | List posts = new ArrayList<>(); 26 | 27 | public User(String name, boolean active) { 28 | this.name = name; 29 | this.active = active; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return "User{" + 35 | "id=" + id + 36 | ", name='" + name + '\'' + 37 | ", active=" + active + 38 | '}'; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/model/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/services/CommentManager.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | import chapter11.model.Comment; 4 | import chapter11.model.Post; 5 | 6 | import java.util.List; 7 | 8 | public interface CommentManager { 9 | Comment addComment(Post post, String content, String userName); 10 | 11 | List findCommentsByPost(Post post); 12 | } 13 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/services/PostManager.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | import chapter11.model.Comment; 4 | import chapter11.model.Post; 5 | 6 | import java.util.List; 7 | 8 | public interface PostManager { 9 | Post addPost(String title, String content, String userName); 10 | 11 | List findPosts(); 12 | 13 | List findPostsByCriteria(String user, String term); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/services/Services.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | public interface Services extends UserManager, PostManager, CommentManager { 4 | } 5 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/services/ServicesImpl.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | import lombok.experimental.Delegate; 4 | 5 | public class ServicesImpl implements Services { 6 | @Delegate 7 | UserManager userManager = new UserManagerImpl(); 8 | 9 | @Delegate 10 | PostManager postmanager = new PostManagerImpl(); 11 | 12 | @Delegate 13 | CommentManager commentManager = new CommentManagerImpl(); 14 | } 15 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/services/UserManager.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | import chapter11.model.User; 4 | 5 | public interface UserManager { 6 | User addUser(String userName); 7 | 8 | User findUserByName(String userName); 9 | 10 | User updateUser(User user); 11 | } 12 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/services/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/servlets/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import javax.servlet.http.HttpServletResponse; 5 | import java.io.IOException; 6 | import java.util.Map; 7 | 8 | public class HelloWorld extends ServletBase { 9 | @Override 10 | protected void doGet( 11 | HttpServletRequest request, 12 | HttpServletResponse response) 13 | throws IOException { 14 | Map data=Map.of( 15 | "response", this.getInitParameter("message") 16 | ); 17 | write(response, HttpServletResponse.SC_OK, data); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter11/src/main/java/chapter11/servlets/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/resources/hibernate.cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.h2.Driver 9 | jdbc:h2:./db11 10 | org.hibernate.dialect.H2Dialect 11 | 12 | 13 | true 14 | true 15 | 16 | 17 | create-drop 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /chapter11/src/main/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 | -------------------------------------------------------------------------------- /chapter11/src/main/webapp/WEB-INF/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/main/webapp/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/services/TestBase.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | import chapter11.model.Comment; 4 | import chapter11.model.Post; 5 | import chapter11.model.User; 6 | import com.autumncode.hibernate.util.SessionUtil; 7 | import org.hibernate.query.Query; 8 | import org.testng.annotations.BeforeMethod; 9 | 10 | public class TestBase { 11 | Services services = new ServicesImpl(); 12 | 13 | @BeforeMethod 14 | void clearAll() { 15 | SessionUtil.doWithSession(session -> { 16 | Query commentQuery = session.createQuery("from Comment", Comment.class); 17 | for (var obj : commentQuery.list()) { 18 | session.delete(obj); 19 | } 20 | 21 | Query postQuery = session.createQuery("from Post", Post.class); 22 | for (Post post : postQuery.list()) { 23 | session.delete(post); 24 | } 25 | Query query = session.createQuery("from User", User.class); 26 | for (User user : query.list()) { 27 | session.delete(user); 28 | } 29 | }); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/services/UserManagerTest.java: -------------------------------------------------------------------------------- 1 | package chapter11.services; 2 | 3 | import chapter11.model.User; 4 | import org.testng.annotations.DataProvider; 5 | import org.testng.annotations.Test; 6 | 7 | import static org.testng.Assert.assertEquals; 8 | 9 | public class UserManagerTest extends TestBase { 10 | @DataProvider 11 | Object[][] users() { 12 | return new Object[][]{ 13 | {"ts", false}, 14 | {"jbo", true} 15 | }; 16 | } 17 | 18 | @Test(dataProvider = "users") 19 | void addUsersTest(String userName, boolean active) { 20 | services.addUser(userName); 21 | User user = services.findUserByName(userName); 22 | assertEquals(user.isActive(), true); 23 | 24 | if (!active) { 25 | user.setActive(active); 26 | services.updateUser(user); 27 | user = services.findUserByName(userName); 28 | assertEquals(user.isActive(), active); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/services/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/AddCommentService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.http.HttpResponse; 5 | 6 | public class AddCommentService extends BaseService { 7 | static HttpResponse addComment( 8 | Integer id, 9 | String content, 10 | String userName 11 | ) throws IOException, InterruptedException { 12 | String path = String.format( 13 | "addcomment?id=%s&content=%s&userName=%s", 14 | id, 15 | encode(content), 16 | encode(userName)); 17 | return issueRequest(path); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/AddPostService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.http.HttpResponse; 5 | 6 | public class AddPostService extends BaseService { 7 | static HttpResponse addPost( 8 | String title, 9 | String content, 10 | String userName 11 | ) throws IOException, InterruptedException { 12 | String path = String.format( 13 | "addpost?title=%s&content=%s&userName=%s", 14 | encode(title), 15 | encode(content), 16 | encode(userName)); 17 | return issueRequest(path); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/AddUserService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.http.HttpResponse; 5 | 6 | public class AddUserService extends BaseService { 7 | static HttpResponse addUser( 8 | String userName) 9 | throws IOException, InterruptedException { 10 | String path = String.format( 11 | "adduser?userName=%s", 12 | encode(userName) 13 | ); 14 | return issueRequest(path); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/AddUserServletTest.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import org.testng.annotations.Test; 4 | 5 | import javax.servlet.http.HttpServletResponse; 6 | import java.io.IOException; 7 | import java.net.http.HttpResponse; 8 | import java.util.Map; 9 | 10 | import static org.testng.Assert.assertEquals; 11 | 12 | public class AddUserServletTest 13 | extends BadAddUserServletTest { 14 | String getServletName() { 15 | return "adduser"; 16 | } 17 | 18 | @Override 19 | @Test 20 | void runAddUser() 21 | throws IOException, InterruptedException { 22 | HttpResponse response = 23 | issueRequest("adduser?userName=jbo"); 24 | 25 | Map data = 26 | mapper.readValue(response.body(), mapOfMaps); 27 | 28 | assertEquals( 29 | response.statusCode(), 30 | HttpServletResponse.SC_OK 31 | ); 32 | 33 | response = SimpleGetPostsService.getSimplePosts(); 34 | 35 | assertEquals( 36 | response.statusCode(), 37 | HttpServletResponse.SC_OK 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/BaseService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.URI; 5 | import java.net.URLEncoder; 6 | import java.net.http.HttpClient; 7 | import java.net.http.HttpRequest; 8 | import java.net.http.HttpResponse; 9 | import java.nio.charset.Charset; 10 | import java.time.Duration; 11 | 12 | public class BaseService { 13 | static String encode(String value) { 14 | return URLEncoder.encode( 15 | value, 16 | Charset.defaultCharset() 17 | ); 18 | } 19 | 20 | static HttpResponse issueRequest(String path) 21 | throws IOException, InterruptedException { 22 | HttpClient client = HttpClient.newBuilder().build(); 23 | 24 | HttpRequest request = HttpRequest.newBuilder() 25 | .uri(URI.create("http://localhost:8080/myapp/" + path)) 26 | .timeout(Duration.ofSeconds(3)) 27 | .build(); 28 | 29 | HttpResponse response = 30 | client.send(request, HttpResponse.BodyHandlers.ofString()); 31 | return response; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/GetPostService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.http.HttpResponse; 5 | 6 | public class GetPostService extends BaseService { 7 | static HttpResponse getPost(Integer id) 8 | throws IOException, InterruptedException { 9 | return issueRequest( 10 | String.format("getpost?id=%d", id) 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/GetPostsService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.http.HttpResponse; 5 | 6 | public class GetPostsService extends BaseService { 7 | static HttpResponse getPosts(String userName, String term) 8 | throws IOException, InterruptedException { 9 | StringBuilder path = new StringBuilder("getposts"); 10 | String separator = "?"; 11 | if (userName != null && !userName.isEmpty()) { 12 | path 13 | .append(separator) 14 | .append("userName=") 15 | .append(userName); 16 | separator = "&"; 17 | } 18 | if (term != null && !term.isEmpty()) { 19 | path 20 | .append(separator) 21 | .append("term=") 22 | .append(term); 23 | } 24 | return issueRequest(path.toString()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import org.testng.annotations.Test; 4 | 5 | import javax.servlet.http.HttpServletResponse; 6 | import java.io.IOException; 7 | import java.net.http.HttpResponse; 8 | import java.util.Map; 9 | 10 | import static org.testng.Assert.assertEquals; 11 | 12 | public class HelloWorldTest extends TestBase { 13 | @Test 14 | public void testHelloWorld() 15 | throws IOException, InterruptedException { 16 | HttpResponse response = 17 | issueRequest("hello"); 18 | 19 | Map data = 20 | mapper.readValue(response.body(), mapOfMaps); 21 | 22 | assertEquals( 23 | response.statusCode(), 24 | HttpServletResponse.SC_OK 25 | ); 26 | assertEquals( 27 | data.get("response"), 28 | "Hello World" 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/SimpleGetPostsService.java: -------------------------------------------------------------------------------- 1 | package chapter11.servlets; 2 | 3 | import java.io.IOException; 4 | import java.net.http.HttpResponse; 5 | 6 | public class SimpleGetPostsService extends BaseService{ 7 | static HttpResponse getSimplePosts() 8 | throws IOException, InterruptedException { 9 | return issueRequest("simplegetposts"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /chapter11/src/test/java/chapter11/servlets/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter11/src/test/resources/servlets.json: -------------------------------------------------------------------------------- 1 | { 2 | "HelloServlet": { 3 | "class": "chapter11.servlets.HelloWorld", 4 | "initParams": { 5 | "message": "Hello World" 6 | }, 7 | "mapping": "/hello" 8 | }, 9 | "BadAddUserServlet": { 10 | "class": "chapter11.servlets.BadAddUserServlet", 11 | "mapping": "/badadduser" 12 | }, 13 | "AddUserServlet": { 14 | "class": "chapter11.servlets.AddUserServlet", 15 | "mapping": "/adduser" 16 | }, 17 | "SimpleGetPostsServlet": { 18 | "class": "chapter11.servlets.SimpleGetPostsServlet", 19 | "mapping": "/simplegetposts" 20 | }, 21 | "AddPostServlet": { 22 | "class": "chapter11.servlets.AddPostServlet", 23 | "mapping": "/addpost" 24 | }, 25 | "GetPostsServlet": { 26 | "class": "chapter11.servlets.GetPostsServlet", 27 | "mapping": "/getposts" 28 | }, 29 | "GetPostServlet": { 30 | "class": "chapter11.servlets.GetPostServlet", 31 | "mapping": "/getpost" 32 | }, 33 | "AddCommentServlet": { 34 | "class": "chapter11.servlets.AddCommentServlet", 35 | "mapping": "/addcomment" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /chapter12/activej/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/activej/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/activej/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/activej/src/main/java/ch12/ObjectMapperFactory.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import com.fasterxml.jackson.databind.ObjectMapper; 5 | import com.fasterxml.jackson.databind.SerializationFeature; 6 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 7 | 8 | public class ObjectMapperFactory { 9 | public ObjectMapper buildMapper() { 10 | ObjectMapper mapper = new ObjectMapper() 11 | .setSerializationInclusion( 12 | JsonInclude.Include.NON_NULL 13 | ) 14 | .disable( 15 | SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 16 | ); 17 | 18 | mapper.registerModule(new JavaTimeModule()); 19 | return mapper; 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter12/activej/src/main/java/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/activej/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/activej/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/java/ch12/PostManager.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import java.util.List; 4 | 5 | public interface PostManager { 6 | List getPosts(); 7 | 8 | Post savePost(String title, String content); 9 | } 10 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/java/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/resources/hibernate.cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.h2.Driver 9 | jdbc:h2:./activej 10 | org.hibernate.dialect.H2Dialect 11 | 12 | 13 | true 14 | true 15 | 16 | 17 | create-drop 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /chapter12/ch12common/src/main/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 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /chapter12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | com.autumncode.books.hibernate 8 | hibernate-6-parent 9 | 5.0 10 | 11 | pom 12 | 13 | 4.0.0 14 | 15 | chapter12 16 | 17 | 18 | ch12common 19 | activej 20 | spring 21 | springboot 22 | 23 | 24 | -------------------------------------------------------------------------------- /chapter12/quarkus/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 28 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/docker/Dockerfile.native-distroless: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a distroless container that runs the Quarkus application in native (no JVM) mode 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native-distroless -t quarkus/quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/quarkus 15 | # 16 | ### 17 | FROM quay.io/quarkus/quarkus-distroless-image:1.0 18 | COPY target/*-runner /application 19 | 20 | EXPOSE 8080 21 | USER nonroot 22 | 23 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 24 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/docker/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/java/ch12/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.Produces; 6 | import javax.ws.rs.core.MediaType; 7 | 8 | @Path("/hello") 9 | public class HelloWorld { 10 | 11 | @GET 12 | @Produces(MediaType.TEXT_PLAIN) 13 | public String hello() { 14 | return "Hello RESTEasy"; 15 | } 16 | } -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/java/ch12/HibernatePostManager.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import org.hibernate.Session; 4 | 5 | import javax.enterprise.context.ApplicationScoped; 6 | import javax.inject.Inject; 7 | import javax.persistence.TypedQuery; 8 | import javax.transaction.Transactional; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | @ApplicationScoped 13 | public class HibernatePostManager implements PostManager { 14 | @Inject 15 | Session session; 16 | 17 | @Transactional 18 | @Override 19 | public Post savePost(Post post) { 20 | post.setCreatedAt(new Date()); 21 | session.save(post); 22 | return post; 23 | } 24 | 25 | @Override 26 | @Transactional 27 | public List getPosts() { 28 | TypedQuery postQuery = session 29 | .createQuery( 30 | "select p from Post p order by p.createdAt desc", 31 | Post.class 32 | ); 33 | postQuery.setMaxResults(20); 34 | return postQuery.getResultList(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/java/ch12/PostEndpoint.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import javax.inject.Inject; 4 | import javax.transaction.Transactional; 5 | import javax.ws.rs.*; 6 | import javax.ws.rs.core.MediaType; 7 | import java.util.List; 8 | 9 | @Path("/posts") 10 | @Produces(MediaType.APPLICATION_JSON) 11 | public class PostEndpoint { 12 | @Inject 13 | PostManager postManager; 14 | 15 | @GET 16 | @Transactional 17 | public List getPosts() { 18 | return postManager.getPosts(); 19 | } 20 | 21 | @POST 22 | @Transactional 23 | public Post addPost(Post post) { 24 | return postManager.savePost(post); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/java/ch12/PostManager.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import java.util.List; 4 | 5 | public interface PostManager { 6 | Post savePost(Post post); 7 | 8 | List getPosts(); 9 | } 10 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/java/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/resources/META-INF/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/resources/META-INF/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # datasource configuration 2 | quarkus.datasource.db-kind = h2 3 | quarkus.datasource.username = sa 4 | quarkus.datasource.password = 5 | quarkus.datasource.jdbc.url = jdbc:h2:file:./quarkus 6 | 7 | # drop and create the database at startup (use `update` to only update the schema) 8 | quarkus.hibernate-orm.database.generation=drop-and-create 9 | 10 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/test/java/ch12/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import io.quarkus.test.junit.QuarkusTest; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static io.restassured.RestAssured.given; 7 | import static org.hamcrest.CoreMatchers.is; 8 | 9 | @QuarkusTest 10 | public class HelloWorldTest { 11 | 12 | @Test 13 | public void testHelloEndpoint() { 14 | given() 15 | .when().get("/hello") 16 | .then() 17 | .statusCode(200) 18 | .body(is("Hello RESTEasy")); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /chapter12/quarkus/src/test/java/ch12/NativeHelloWorldIT.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import io.quarkus.test.junit.NativeImageTest; 4 | 5 | @NativeImageTest 6 | public class NativeHelloWorldIT extends HelloWorldTest { 7 | 8 | // Execute the same tests but in native mode. 9 | } -------------------------------------------------------------------------------- /chapter12/quarkus/src/test/java/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/META-INF/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/META-INF/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/application.properties: -------------------------------------------------------------------------------- 1 | # datasource configuration 2 | quarkus.datasource.db-kind = h2 3 | quarkus.datasource.username = sa 4 | quarkus.datasource.password = 5 | quarkus.datasource.jdbc.url = jdbc:h2:file:./quarkus 6 | 7 | # drop and create the database at startup (use `update` to only update the schema) 8 | quarkus.hibernate-orm.database.generation=drop-and-create 9 | 10 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/ch12/HelloWorld.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/classes/ch12/HelloWorld.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/ch12/HibernatePostManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/classes/ch12/HibernatePostManager.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/ch12/Post.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/classes/ch12/Post.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/ch12/PostEndpoint.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/classes/ch12/PostEndpoint.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/ch12/PostManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/classes/ch12/PostManager.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/classes/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/generated-sources/annotations/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/generated-sources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/generated-test-sources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/generated-test-sources/test-annotations/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/compile/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/compile/null/createdFiles.lst: -------------------------------------------------------------------------------- 1 | ch12/HelloWorld.class 2 | ch12/Post.class 3 | ch12/PostManager.class 4 | ch12/PostEndpoint.class 5 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/compile/null/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/compile/null/inputFiles.lst: -------------------------------------------------------------------------------- 1 | /Users/joeo/work/publishing/quarkus/src/main/java/ch12/PostEndpoint.java 2 | /Users/joeo/work/publishing/quarkus/src/main/java/ch12/PostManager.java 3 | /Users/joeo/work/publishing/quarkus/src/main/java/ch12/HibernatePostManager.java 4 | /Users/joeo/work/publishing/quarkus/src/main/java/ch12/HelloWorld.java 5 | /Users/joeo/work/publishing/quarkus/src/main/java/ch12/Post.java 6 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/testCompile/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/testCompile/null/createdFiles.lst: -------------------------------------------------------------------------------- 1 | ch12/NativeHelloWorldIT.class 2 | ch12/HelloWorldTest.class 3 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/testCompile/null/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/maven-status/maven-compiler-plugin/testCompile/null/inputFiles.lst: -------------------------------------------------------------------------------- 1 | /Users/joeo/work/publishing/quarkus/src/test/java/ch12/NativeHelloWorldIT.java 2 | /Users/joeo/work/publishing/quarkus/src/test/java/ch12/HelloWorldTest.java 3 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/quarkus-dev.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/quarkus-dev.jar -------------------------------------------------------------------------------- /chapter12/quarkus/target/quarkus/bootstrap/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/quarkus/bootstrap/dev-app-model.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/quarkus/bootstrap/dev-app-model.dat -------------------------------------------------------------------------------- /chapter12/quarkus/target/quarkus/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/test-classes/ch12/HelloWorldTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/test-classes/ch12/HelloWorldTest.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/test-classes/ch12/NativeHelloWorldIT.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/beginning-hibernate-6/a03ce3d6ff48942bcfe684b0064c1ca56650376f/chapter12/quarkus/target/test-classes/ch12/NativeHelloWorldIT.class -------------------------------------------------------------------------------- /chapter12/quarkus/target/test-classes/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/quarkus/target/test-classes/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/spring/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/spring/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/spring/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/spring/src/main/java/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/spring/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/spring/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/springboot/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/springboot/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/springboot/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/springboot/src/main/java/ch12/PostApplication.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class PostApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(PostApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /chapter12/springboot/src/main/java/ch12/PostController.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import org.springframework.data.domain.Sort; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | @RestController 10 | public class PostController { 11 | private final PostRepository postRepository; 12 | 13 | PostController(PostRepository postRepository) { 14 | this.postRepository = postRepository; 15 | } 16 | 17 | @GetMapping(value = "/", produces = {"application/json"}) 18 | public List index() { 19 | return postRepository.findAll( 20 | Sort.by(Sort.Direction.DESC,"createdAt") 21 | ); 22 | } 23 | 24 | @GetMapping(value = "/add", produces = {"application/json"}) 25 | public Post addPost( 26 | @RequestParam("title") String title, 27 | @RequestParam("content") String content) { 28 | Post post = new Post(); 29 | post.setTitle(title); 30 | post.setContent(content); 31 | post.setCreatedAt(new Date()); 32 | postRepository.save(post); 33 | return post; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chapter12/springboot/src/main/java/ch12/PostRepository.java: -------------------------------------------------------------------------------- 1 | package ch12; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | 5 | public interface PostRepository 6 | extends JpaRepository { 7 | } 8 | -------------------------------------------------------------------------------- /chapter12/springboot/src/main/java/ch12/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter12/springboot/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | com.autumncode.books.hibernate 8 | hibernate-6-parent 9 | 5.0 10 | 11 | 12 | 4.0.0 13 | 14 | chapter13 15 | 16 | 17 | 18 | com.autumncode.books.hibernate 19 | util 20 | ${project.parent.version} 21 | 22 | 23 | org.projectlombok 24 | lombok 25 | 26 | 27 | org.hibernate 28 | hibernate-envers 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /chapter13/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/main/java/chapter13/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/main/java/chapter13/model/User.java: -------------------------------------------------------------------------------- 1 | package chapter13.model; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | import org.hibernate.envers.Audited; 6 | 7 | import javax.persistence.*; 8 | import java.util.Arrays; 9 | import java.util.HashSet; 10 | import java.util.Set; 11 | 12 | @Entity 13 | @Data 14 | @NoArgsConstructor 15 | @Audited 16 | public class User { 17 | @Id 18 | @GeneratedValue(strategy = GenerationType.AUTO) 19 | Integer id; 20 | 21 | @Column(unique = true) 22 | String name; 23 | 24 | boolean active; 25 | 26 | @ElementCollection 27 | Set groups; 28 | 29 | String description; 30 | 31 | public User(String name, boolean active) { 32 | this.name = name; 33 | this.active = active; 34 | } 35 | 36 | public void addGroups(String... groupSet) { 37 | if (getGroups() == null) { 38 | setGroups(new HashSet<>()); 39 | } 40 | getGroups().addAll(Arrays.asList(groupSet)); 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /chapter13/src/main/java/chapter13/model/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/main/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/main/resources/hibernate.cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.h2.Driver 9 | jdbc:h2:file:./db13 10 | sa 11 | 12 | org.hibernate.dialect.H2Dialect 13 | 14 | 15 | true 16 | true 17 | 18 | 19 | create-drop 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /chapter13/src/main/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 | -------------------------------------------------------------------------------- /chapter13/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/test/java/chapter13/ValidateRevisionCountTest.java: -------------------------------------------------------------------------------- 1 | package chapter13; 2 | 3 | import chapter13.model.User; 4 | import com.autumncode.hibernate.util.SessionUtil; 5 | import org.hibernate.envers.AuditReader; 6 | import org.hibernate.envers.AuditReaderFactory; 7 | import org.testng.annotations.Test; 8 | 9 | import java.util.List; 10 | 11 | import static org.testng.Assert.*; 12 | 13 | public class ValidateRevisionCountTest extends BaseTest { 14 | @Test 15 | public void validateRevisionCount() { 16 | SessionUtil.doWithSession((session) -> { 17 | AuditReader reader = AuditReaderFactory.get(session); 18 | 19 | List revisions = 20 | reader.getRevisions(User.class, userId[0]); 21 | 22 | assertEquals(revisions.size(), 3); 23 | }); 24 | } 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /chapter13/src/test/java/chapter13/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /chapter13/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /errata.md: -------------------------------------------------------------------------------- 1 | # Errata for *Beginning Hibernate 6* 2 | 3 | On **page xx** [Summary of error]: 4 | 5 | Details of error here. Highlight key pieces in **bold**. 6 | 7 | *** 8 | 9 | On **page xx** [Summary of error]: 10 | 11 | Details of error here. Highlight key pieces in **bold**. 12 | 13 | *** -------------------------------------------------------------------------------- /util/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | hibernate-6-parent 7 | com.autumncode.books.hibernate 8 | 5.0 9 | 10 | 4.0.0 11 | util 12 | 13 | 14 | 15 | org.hibernate.orm 16 | hibernate-hikaricp 17 | ${hibernate.core.version} 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | test 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /util/src/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/com/autumncode/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/com/autumncode/hibernate/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/com/autumncode/hibernate/util/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/com/autumncode/jpa/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/com/autumncode/jpa/util/JPASessionUtil.java: -------------------------------------------------------------------------------- 1 | package com.autumncode.jpa.util; 2 | 3 | import org.hibernate.Session; 4 | 5 | import javax.persistence.EntityManager; 6 | import javax.persistence.EntityManagerFactory; 7 | import javax.persistence.Persistence; 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | public class JPASessionUtil { 12 | private static Map 13 | persistenceUnits = new HashMap<>(); 14 | 15 | @SuppressWarnings("WeakerAccess") 16 | public static synchronized EntityManager 17 | getEntityManager(String persistenceUnitName) { 18 | persistenceUnits 19 | .putIfAbsent( 20 | persistenceUnitName, 21 | Persistence 22 | .createEntityManagerFactory( 23 | persistenceUnitName 24 | )); 25 | return persistenceUnits 26 | .get(persistenceUnitName) 27 | .createEntityManager(); 28 | } 29 | 30 | public static Session getSession(String persistenceUnitName) { 31 | return getEntityManager(persistenceUnitName) 32 | .unwrap(Session.class); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /util/src/main/java/com/autumncode/jpa/util/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/com/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/main/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/hibernate/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/hibernate/util/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/jpa/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/jpa/util/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/util/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/util/model/Thing.java: -------------------------------------------------------------------------------- 1 | package com.autumncode.util.model; 2 | 3 | import lombok.Data; 4 | 5 | import javax.persistence.*; 6 | 7 | @Entity(name = "Thing") 8 | @Data 9 | public class Thing { 10 | @Id 11 | @GeneratedValue(strategy = GenerationType.AUTO) 12 | Integer id; 13 | @Column 14 | String name; 15 | } 16 | -------------------------------------------------------------------------------- /util/src/test/java/com/autumncode/util/model/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/com/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/java/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/resources/META-INF/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/resources/META-INF/persistence.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /util/src/test/resources/desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | ConfirmFileOp=0 3 | IconResource=C:\Program Files\Google\Drive File Stream\51.0.16.0\GoogleDriveFS.exe,23 4 | -------------------------------------------------------------------------------- /util/src/test/resources/hibernate.cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.h2.Driver 9 | jdbc:h2:./util 10 | sa 11 | 12 | org.hibernate.dialect.H2Dialect 13 | 14 | 15 | true 16 | 17 | update 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /util/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | --------------------------------------------------------------------------------