@startuml package com.iluwatar.repository { class App { - LOGGER : Logger {static} + App() + main(args : String[]) {static} } class AppConfig { - LOGGER : Logger {static} + AppConfig() + dataSource() : DataSource + entityManagerFactory() : LocalContainerEntityManagerFactoryBean - jpaProperties() : Properties {static} + main(args : String[]) {static} + transactionManager() : JpaTransactionManager } class Person { - age : int - id : Long - name : String - surname : String + Person() + Person(name : String, surname : String, age : int) + equals(obj : Object) : boolean + getAge() : int + getId() : Long + getName() : String + getSurname() : String + hashCode() : int + setAge(age : int) + setId(id : Long) + setName(name : String) + setSurname(surname : String) + toString() : String } interface PersonRepository { + findByName(String) : Person {abstract} } class PersonSpecifications { + PersonSpecifications() } class AgeBetweenSpec { - from : int - to : int + AgeBetweenSpec(from : int, to : int) + toPredicate(root : Root, query : CriteriaQuery, cb : CriteriaBuilder) : Predicate } class NameEqualSpec { + name : String + NameEqualSpec(name : String) + toPredicate(root : Root, query : CriteriaQuery, cb : CriteriaBuilder) : Predicate } } NameEqualSpec ..+ PersonSpecifications AgeBetweenSpec ..+ PersonSpecifications @enduml