BAEL-592: Cleanup and refactor (#1823)

* Add files via upload

* Update pom.xml

* Update RunGuice.java

* Update Communication.java

* Update CommunicationMode.java

* Update DefaultCommunicator.java

* Update EmailCommunicationMode.java

* Update IMCommunicationMode.java

* Update SMSCommunicationMode.java

* Update MessageLogger.java

* Update MessageSentLoggable.java

* Update AOPModule.java

* Update BasicModule.java

* Update CommunicationModel.java

* Update Communicator.java

* Update BasicModule.java

* Update RunGuice.java

* Update MessageLogger.java

* Update Communicator.java

* Update pom.xml

* BAEL-278: Updated README.md

* BAEL-554: Add and update README.md files

* Update pom.xml

* Update pom.xml

* Update pom.xml

* BAEL-345: fixed assertion

* BAEL-109: Updated README.md

* BAEL-345: Added README.md

* Reinstating reactor-core module in root-level pom

* BAEL-393: Adding guide-intro module to root pom

* BAEL-9: Updated README.md

* BAEL-157: README.md updated

* Changed project name

* Update RunGuice.java

Removed references to message logging and output

* Update Communication.java

Removed message logging-related code

* BAEL-566: Updated README.md

* New project name

* BAEL-393: removing guice-intro directory

* BAEL-393: renamed module guice-intro to guice in root pom.xml

* BAEL-393 and BAEL-541 README.md files

* BAEL-731: Updated README.md

* BAEL-680: renamed test methods

* BAEL-714: Updated README.md

* BAEL-737: Updated README.md

* BAEL-680 and BAEL-756 README.md updates

* BAEL-666: Updated README

* BAEL-415: Custom Scope

* BAEL-415: Custom Scope - renamed classes to reflect TenantScope

* README file updates for BAEL-723, BAEL-763, and BAEL-415

* BAEL-735: README

* BAEL-567: README

* BAEL-736: README

* BAEL-766: Update README

* BAEL-555: README update

* BAEL-761: README update

* BAEL-742: Stripe API for Java README file

* BAEL-86: Correction to README file

* BAEL-828: Updated README.md

* BAEL-830: Updated README

* BAEL-870: Switched from TestNG to JUnit due to build errors

* BAEL-870: Update README

* BAEL-592: Cleanup files that were copied from spring-hibernate4 module

* BAEL-592: Cleanup files that were copied from spring-hibernate4 module and add new basic test
This commit is contained in:
KevinGilmore
2017-05-15 06:51:57 +02:00
committed by Grzegorz Piwowarek
parent 7b93d18a2d
commit 9ec6e18552
80 changed files with 90 additions and 3830 deletions
+60 -30
View File
@@ -33,11 +33,6 @@
<artifactId>spring-aspects</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${org.springframework.security.version}</version>
</dependency>
<!-- persistence -->
@@ -56,21 +51,11 @@
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>${hibernate-envers.version}</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>${jta.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
@@ -80,17 +65,6 @@
<!-- validation -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>${javax.el-api.version}</version>
</dependency>
<!-- utils -->
<dependency>
@@ -115,6 +89,11 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>${org.hamcrest.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
@@ -129,12 +108,25 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>${org.hamcrest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>${hsqldb.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
</dependency>
</dependencies>
<build>
@@ -146,22 +138,55 @@
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<!-- Spring -->
<org.springframework.version>4.3.5.RELEASE</org.springframework.version>
<org.springframework.data.version>1.10.6.RELEASE</org.springframework.data.version>
<org.springframework.security.version>4.2.1.RELEASE</org.springframework.security.version>
<org.springframework.data.version>1.10.6.RELEASE</org.springframework.data.version>
<!-- persistence -->
<hibernate.version>5.2.8.Final</hibernate.version>
<hibernate-envers.version>${hibernate.version}</hibernate-envers.version>
<mysql-connector-java.version>6.0.5</mysql-connector-java.version>
<tomcat-dbcp.version>8.5.11</tomcat-dbcp.version>
<hibernate.version>5.2.10.Final</hibernate.version>
<tomcat-dbcp.version>8.5.15</tomcat-dbcp.version>
<jta.version>1.1</jta.version>
<hsqldb.version>2.3.4</hsqldb.version>
<h2.version>1.4.195</h2.version>
<!-- logging -->
<org.slf4j.version>1.7.21</org.slf4j.version>
<logback.version>1.1.7</logback.version>
<!-- various -->
<hibernate-validator.version>5.4.0.Final</hibernate-validator.version>
<javax.el-api.version>2.2.5</javax.el-api.version>
@@ -170,6 +195,11 @@
<guava.version>21.0</guava.version>
<commons-lang3.version>3.5</commons-lang3.version>
<!-- testing -->
<org.hamcrest.version>1.3</org.hamcrest.version>
<junit.version>4.12</junit.version>
<httpcore.version>4.4.1</httpcore.version>
<httpclient.version>4.5</httpclient.version>
@@ -1,81 +0,0 @@
package com.baeldung.hibernate.criteria.model;
import java.io.Serializable;
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
private Integer itemId;
private String itemName;
private String itemDescription;
private Integer itemPrice;
// constructors
public Item() {
}
public Item(final Integer itemId, final String itemName, final String itemDescription) {
super();
this.itemId = itemId;
this.itemName = itemName;
this.itemDescription = itemDescription;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((itemId == null) ? 0 : itemId.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Item other = (Item) obj;
if (itemId == null) {
if (other.itemId != null)
return false;
} else if (!itemId.equals(other.itemId))
return false;
return true;
}
public Integer getItemId() {
return itemId;
}
public void setItemId(final Integer itemId) {
this.itemId = itemId;
}
public String getItemName() {
return itemName;
}
public void setItemName(final String itemName) {
this.itemName = itemName;
}
public String getItemDescription() {
return itemDescription;
}
public Integer getItemPrice() {
return itemPrice;
}
public void setItemPrice(final Integer itemPrice) {
this.itemPrice = itemPrice;
}
public void setItemDescription(final String itemDescription) {
this.itemDescription = itemDescription;
}
}
@@ -1,17 +0,0 @@
package com.baeldung.hibernate.criteria.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
public static Session getHibernateSession() {
final SessionFactory sf = new Configuration().configure("criteria.cfg.xml").buildSessionFactory();
final Session session = sf.openSession();
return session;
}
}
@@ -1,279 +0,0 @@
/**
* ApplicationViewer is the class that starts the application
* First it creates the session object and then creates the
* criteria query.
*
* @author Sandeep Kumar
* @version 1.0
* @since 01/13/2017
*/
package com.baeldung.hibernate.criteria.view;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Tuple;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.baeldung.hibernate.criteria.model.Item;
import com.baeldung.hibernate.criteria.util.HibernateUtil;
public class ApplicationView {
@SuppressWarnings("unchecked")
public boolean checkIfCriteriaTimeLower() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
Transaction tx = null;
// calculate the time taken by criteria
final long startTimeCriteria = System.nanoTime();
criteriaItem.select(rootItem).where(builder.like(rootItem.get("itemName"), "%item One%"));
final List<Item> results = session.createQuery(criteriaItem).getResultList();
final long endTimeCriteria = System.nanoTime();
final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000;
// calculate the time taken by HQL
final long startTimeHQL = System.nanoTime();
tx = session.beginTransaction();
final List<Item> items = session.createQuery("FROM Item where itemName like '%item One%'").getResultList();
final long endTimeHQL = System.nanoTime();
final long durationHQL = (endTimeHQL - startTimeHQL) / 1000;
if (durationCriteria > durationHQL) {
return false;
} else {
return true;
}
}
// To get items having price more than 1000
public String[] greaterThanCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.greaterThan(rootItem.get("itemPrice"), 1000));
final List<Item> greaterThanItemsList = session.createQuery(criteriaItem).getResultList();
final String greaterThanItems[] = new String[greaterThanItemsList.size()];
for (int i = 0; i < greaterThanItemsList.size(); i++) {
greaterThanItems[i] = greaterThanItemsList.get(i).getItemName();
}
session.close();
return greaterThanItems;
}
// To get items having price less than 1000
public String[] lessThanCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.lessThan(rootItem.get("itemPrice"), 1000));
final List<Item> lessThanItemsList = session.createQuery(criteriaItem).getResultList();
final String lessThanItems[] = new String[lessThanItemsList.size()];
for (int i = 0; i < lessThanItemsList.size(); i++) {
lessThanItems[i] = lessThanItemsList.get(i).getItemName();
}
session.close();
return lessThanItems;
}
// To get items whose Name start with Chair
public String[] likeCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.like(rootItem.get("itemName"), "%chair%"));
final List<Item> likeItemsList = session.createQuery(criteriaItem).getResultList();
final String likeItems[] = new String[likeItemsList.size()];
for (int i = 0; i < likeItemsList.size(); i++) {
likeItems[i] = likeItemsList.get(i).getItemName();
}
session.close();
return likeItems;
}
// Case sensitive search
public String[] likeCaseCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.like(rootItem.get("itemName"), "%Chair%"));
final List<Item> ilikeItemsList = session.createQuery(criteriaItem).getResultList();
final String ilikeItems[] = new String[ilikeItemsList.size()];
for (int i = 0; i < ilikeItemsList.size(); i++) {
ilikeItems[i] = ilikeItemsList.get(i).getItemName();
}
session.close();
return ilikeItems;
}
// To get records having itemPrice in between 100 and 200
public String[] betweenCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
// To get items having price more than 1000
criteriaItem.select(rootItem).where(builder.between(rootItem.get("itemPrice"), 100, 200));
final List<Item> betweenItemsList = session.createQuery(criteriaItem).getResultList();
final String betweenItems[] = new String[betweenItemsList.size()];
for (int i = 0; i < betweenItemsList.size(); i++) {
betweenItems[i] = betweenItemsList.get(i).getItemName();
}
session.close();
return betweenItems;
}
// To check if the given property is null
public String[] nullCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.isNull(rootItem.get("itemDescription")));
final List<Item> nullItemsList = session.createQuery(criteriaItem).getResultList();
final String nullDescItems[] = new String[nullItemsList.size()];
for (int i = 0; i < nullItemsList.size(); i++) {
nullDescItems[i] = nullItemsList.get(i).getItemName();
}
session.close();
return nullDescItems;
}
// To check if the given property is not null
public String[] notNullCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.isNotNull(rootItem.get("itemDescription")));
final List<Item> notNullItemsList = session.createQuery(criteriaItem).getResultList();
final String notNullDescItems[] = new String[notNullItemsList.size()];
for (int i = 0; i < notNullItemsList.size(); i++) {
notNullDescItems[i] = notNullItemsList.get(i).getItemName();
}
session.close();
return notNullDescItems;
}
// Adding more than one expression in one cr
public String[] twoCriteria() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.select(rootItem).where(builder.isNull(rootItem.get("itemDescription"))).where(builder.like(rootItem.get("itemName"), "chair%"));
final List<Item> notNullItemsList = session.createQuery(criteriaItem).getResultList();
final String notNullDescItems[] = new String[notNullItemsList.size()];
for (int i = 0; i < notNullItemsList.size(); i++) {
notNullDescItems[i] = notNullItemsList.get(i).getItemName();
}
session.close();
return notNullDescItems;
}
// To get items matching with the above defined conditions joined
// with Logical AND
public String[] andLogicalCriteria() {
List<Predicate> predicates = new ArrayList<Predicate>();
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
predicates.add(builder.greaterThan(rootItem.get("itemPrice"), 1000));
predicates.add(builder.like(rootItem.get("itemName"), "Chair%"));
Predicate andPredicate = builder.and(predicates.toArray(new Predicate[] {}));
criteriaItem.select(rootItem).where(andPredicate);
final List<Item> andItemsList = session.createQuery(criteriaItem).getResultList();
final String andItems[] = new String[andItemsList.size()];
for (int i = 0; i < andItemsList.size(); i++) {
andItems[i] = andItemsList.get(i).getItemName();
}
session.close();
return andItems;
}
// To get items matching with the above defined conditions joined
// with Logical OR
public String[] orLogicalCriteria() {
List<Predicate> predicates = new ArrayList<Predicate>();
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
predicates.add(builder.greaterThan(rootItem.get("itemPrice"), 1000));
predicates.add(builder.like(rootItem.get("itemName"), "Chair%"));
Predicate orPredicate = builder.or(predicates.toArray(new Predicate[] {}));
criteriaItem.select(rootItem).where(orPredicate);
final List<Item> orItemsList = session.createQuery(criteriaItem).getResultList();
final String orItems[] = new String[orItemsList.size()];
for (int i = 0; i < orItemsList.size(); i++) {
orItems[i] = orItemsList.get(i).getItemName();
}
session.close();
return orItems;
}
// Sorting example
public String[] sortingCriteria() {
List<Order> listOrders = new ArrayList<Order>();
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Item> criteriaItem = builder.createQuery(Item.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
listOrders.add(builder.asc(rootItem.get("itemName")));
listOrders.add(builder.desc(rootItem.get("itemPrice")));
criteriaItem.orderBy(listOrders.toArray(new Order[] {}));
final List<Item> sortedItemsList = session.createQuery(criteriaItem).getResultList();
final String sortedItems[] = new String[sortedItemsList.size()];
for (int i = 0; i < sortedItemsList.size(); i++) {
sortedItems[i] = sortedItemsList.get(i).getItemName();
}
session.close();
return sortedItems;
}
// Set projections Row Count
public Long[] projectionRowCount() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Tuple> criteriaItem = builder.createQuery(Tuple.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.multiselect(builder.count(rootItem));
final List<Tuple> itemProjected = session.createQuery(criteriaItem).getResultList();
final Long projectedRowCount[] = new Long[1];
projectedRowCount[0] = (long) itemProjected.get(0).get(0);
session.close();
return projectedRowCount;
}
// Set projections average of itemPrice
public Double[] projectionAverage() {
final Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Tuple> criteriaItem = builder.createQuery(Tuple.class);
Root<Item> rootItem = criteriaItem.from(Item.class);
criteriaItem.multiselect(builder.avg(rootItem.get("itemPrice")));
final List<Tuple> itemProjected = session.createQuery(criteriaItem).getResultList();
Double avgItemPrice[] = new Double[1];
avgItemPrice[0] = Double.valueOf(itemProjected.get(0).get(0).toString());
session.close();
return avgItemPrice;
}
}
@@ -1,58 +0,0 @@
package com.baeldung.hibernate.fetching.model;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Date;
@Entity
@Table(name = "USER_ORDER")
public class OrderDetail implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long orderId;
public OrderDetail() {
}
public OrderDetail(Date orderDate, String orderDesc) {
super();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((orderId == null) ? 0 : orderId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
OrderDetail other = (OrderDetail) obj;
if (orderId == null) {
if (other.orderId != null)
return false;
} else if (!orderId.equals(other.orderId))
return false;
return true;
}
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
}
@@ -1,71 +0,0 @@
package com.baeldung.hibernate.fetching.model;
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "USER")
public class UserEager implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long userId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
private Set<OrderDetail> orderDetail = new HashSet<OrderDetail>();
public UserEager() {
}
public UserEager(final Long userId) {
super();
this.userId = userId;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final UserEager other = (UserEager) obj;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
return true;
}
public Long getUserId() {
return userId;
}
public void setUserId(final Long userId) {
this.userId = userId;
}
public Set<OrderDetail> getOrderDetail() {
return orderDetail;
}
public void setOrderDetail(Set<OrderDetail> orderDetail) {
this.orderDetail = orderDetail;
}
}
@@ -1,71 +0,0 @@
package com.baeldung.hibernate.fetching.model;
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "USER")
public class UserLazy implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long userId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Set<OrderDetail> orderDetail = new HashSet<OrderDetail>();
public UserLazy() {
}
public UserLazy(final Long userId) {
super();
this.userId = userId;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final UserLazy other = (UserLazy) obj;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
return true;
}
public Long getUserId() {
return userId;
}
public void setUserId(final Long userId) {
this.userId = userId;
}
public Set<OrderDetail> getOrderDetail() {
return orderDetail;
}
public void setOrderDetail(Set<OrderDetail> orderDetail) {
this.orderDetail = orderDetail;
}
}
@@ -1,28 +0,0 @@
package com.baeldung.hibernate.fetching.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
public static Session getHibernateSession(String fetchMethod) {
// two config files are there
// one with lazy loading enabled
// another lazy = false
SessionFactory sf;
if ("lazy".equals(fetchMethod)) {
sf = new Configuration().configure("fetchingLazy.cfg.xml").buildSessionFactory();
} else {
sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory();
}
// fetching.cfg.xml is used for this example
return sf.openSession();
}
public static Session getHibernateSession() {
return new Configuration().configure("fetching.cfg.xml").buildSessionFactory().openSession();
}
}
@@ -1,68 +0,0 @@
package com.baeldung.hibernate.fetching.view;
import com.baeldung.hibernate.fetching.model.OrderDetail;
import com.baeldung.hibernate.fetching.model.UserEager;
import com.baeldung.hibernate.fetching.model.UserLazy;
import com.baeldung.hibernate.fetching.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.List;
import java.util.Set;
public class FetchingAppView {
public FetchingAppView() {
}
// lazily loaded
public Set<OrderDetail> lazyLoaded() {
final Session sessionLazy = HibernateUtil.getHibernateSession("lazy");
List<UserLazy> users = sessionLazy.createQuery("From UserLazy").getResultList();
UserLazy userLazyLoaded = users.get(3);
// since data is lazyloaded so data won't be initialized
return (userLazyLoaded.getOrderDetail());
}
// eagerly loaded
public Set<OrderDetail> eagerLoaded() {
final Session sessionEager = HibernateUtil.getHibernateSession();
// data should be loaded in the following line
// also note the queries generated
List<UserEager> user = sessionEager.createQuery("From UserEager").getResultList();
UserEager userEagerLoaded = user.get(3);
return userEagerLoaded.getOrderDetail();
}
// creates test data
// call this method to create the data in the database
public void createTestData() {
final Session session = HibernateUtil.getHibernateSession("lazy");
Transaction tx = session.beginTransaction();
final UserLazy user1 = new UserLazy();
final UserLazy user2 = new UserLazy();
final UserLazy user3 = new UserLazy();
session.save(user1);
session.save(user2);
session.save(user3);
final OrderDetail order1 = new OrderDetail();
final OrderDetail order2 = new OrderDetail();
final OrderDetail order3 = new OrderDetail();
final OrderDetail order4 = new OrderDetail();
final OrderDetail order5 = new OrderDetail();
session.saveOrUpdate(order1);
session.saveOrUpdate(order2);
session.saveOrUpdate(order3);
session.saveOrUpdate(order4);
session.saveOrUpdate(order5);
tx.commit();
session.close();
}
}
@@ -1,8 +0,0 @@
package com.baeldung.persistence.dao;
import com.baeldung.persistence.dao.common.IAuditOperations;
import com.baeldung.persistence.model.Bar;
public interface IBarAuditableDao extends IBarDao, IAuditOperations<Bar> {
//
}
@@ -1,10 +0,0 @@
package com.baeldung.persistence.dao;
import java.io.Serializable;
import com.baeldung.persistence.model.Bar;
import org.springframework.data.repository.CrudRepository;
public interface IBarCrudRepository extends CrudRepository<Bar, Serializable> {
//
}
@@ -1,8 +0,0 @@
package com.baeldung.persistence.dao;
import com.baeldung.persistence.dao.common.IOperations;
import com.baeldung.persistence.model.Bar;
public interface IBarDao extends IOperations<Bar> {
//
}
@@ -1,8 +0,0 @@
package com.baeldung.persistence.dao;
import com.baeldung.persistence.model.Child;
import com.baeldung.persistence.dao.common.IOperations;
public interface IChildDao extends IOperations<Child> {
//
}
@@ -1,8 +0,0 @@
package com.baeldung.persistence.dao;
import com.baeldung.persistence.dao.common.IAuditOperations;
import com.baeldung.persistence.model.Foo;
public interface IFooAuditableDao extends IFooDao, IAuditOperations<Foo> {
//
}
@@ -1,8 +0,0 @@
package com.baeldung.persistence.dao;
import com.baeldung.persistence.model.Parent;
import com.baeldung.persistence.dao.common.IOperations;
public interface IParentDao extends IOperations<Parent> {
//
}
@@ -1,37 +0,0 @@
package com.baeldung.persistence.dao.common;
import java.io.Serializable;
import java.util.List;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.hibernate.envers.query.AuditQuery;
@SuppressWarnings("unchecked")
public class AbstractHibernateAuditableDao<T extends Serializable> extends AbstractHibernateDao<T> implements IAuditOperations<T> {
@Override
public List<T> getEntitiesAtRevision(final Number revision) {
final AuditReader auditReader = AuditReaderFactory.get(getCurrentSession());
final AuditQuery query = auditReader.createQuery().forEntitiesAtRevision(clazz, revision);
final List<T> resultList = query.getResultList();
return resultList;
}
@Override
public List<T> getEntitiesModifiedAtRevision(final Number revision) {
final AuditReader auditReader = AuditReaderFactory.get(getCurrentSession());
final AuditQuery query = auditReader.createQuery().forEntitiesModifiedAtRevision(clazz, revision);
final List<T> resultList = query.getResultList();
return resultList;
}
@Override
public List<T> getRevisions() {
final AuditReader auditReader = AuditReaderFactory.get(getCurrentSession());
final AuditQuery query = auditReader.createQuery().forRevisionsOfEntity(clazz, true, true);
final List<T> resultList = query.getResultList();
return resultList;
}
}
@@ -1,56 +0,0 @@
package com.baeldung.persistence.dao.common;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
public class AbstractJpaDao<T extends Serializable> extends AbstractDao<T> implements IOperations<T> {
@PersistenceContext
private EntityManager em;
// API
@Override
public T findOne(final long id) {
return em.find(clazz, Long.valueOf(id).intValue());
}
@Override
public List<T> findAll() {
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<T> cq = cb.createQuery(clazz);
final Root<T> rootEntry = cq.from(clazz);
final CriteriaQuery<T> all = cq.select(rootEntry);
final TypedQuery<T> allQuery = em.createQuery(all);
return allQuery.getResultList();
}
@Override
public void create(final T entity) {
em.persist(entity);
}
@Override
public T update(final T entity) {
em.merge(entity);
return entity;
}
@Override
public void delete(final T entity) {
em.remove(entity);
}
@Override
public void deleteById(final long entityId) {
delete(findOne(entityId));
}
}
@@ -1,13 +0,0 @@
package com.baeldung.persistence.dao.common;
import java.io.Serializable;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@Repository
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class GenericHibernateDao<T extends Serializable> extends AbstractHibernateDao<T> implements IGenericDao<T> {
//
}
@@ -1,14 +0,0 @@
package com.baeldung.persistence.dao.common;
import java.io.Serializable;
import java.util.List;
public interface IAuditOperations<T extends Serializable> {
List<T> getEntitiesAtRevision(Number revision);
List<T> getEntitiesModifiedAtRevision(Number revision);
List<T> getRevisions();
}
@@ -1,7 +0,0 @@
package com.baeldung.persistence.dao.common;
import java.io.Serializable;
public interface IGenericDao<T extends Serializable> extends IOperations<T> {
//
}
@@ -1,28 +0,0 @@
package com.baeldung.persistence.dao.impl;
import java.util.List;
import com.baeldung.persistence.dao.IBarAuditableDao;
import com.baeldung.persistence.dao.common.AbstractHibernateAuditableDao;
import com.baeldung.persistence.model.Bar;
public class BarAuditableDao extends AbstractHibernateAuditableDao<Bar> implements IBarAuditableDao {
public BarAuditableDao() {
super();
setClazz(Bar.class);
}
// API
@Override
public List<Bar> getRevisions() {
final List<Bar> resultList = super.getRevisions();
for (final Bar bar : resultList) {
bar.getFooSet().size(); // force FooSet initialization
}
return resultList;
}
}
@@ -1,19 +0,0 @@
package com.baeldung.persistence.dao.impl;
import com.baeldung.persistence.dao.common.AbstractHibernateDao;
import com.baeldung.persistence.dao.IBarDao;
import com.baeldung.persistence.model.Bar;
import org.springframework.stereotype.Repository;
@Repository
public class BarDao extends AbstractHibernateDao<Bar> implements IBarDao {
public BarDao() {
super();
setClazz(Bar.class);
}
// API
}
@@ -1,19 +0,0 @@
package com.baeldung.persistence.dao.impl;
import com.baeldung.persistence.dao.IBarDao;
import com.baeldung.persistence.dao.common.AbstractJpaDao;
import com.baeldung.persistence.model.Bar;
import org.springframework.stereotype.Repository;
@Repository
public class BarJpaDao extends AbstractJpaDao<Bar> implements IBarDao {
public BarJpaDao() {
super();
setClazz(Bar.class);
}
// API
}
@@ -1,19 +0,0 @@
package com.baeldung.persistence.dao.impl;
import com.baeldung.persistence.dao.common.AbstractHibernateDao;
import com.baeldung.persistence.model.Child;
import com.baeldung.persistence.dao.IChildDao;
import org.springframework.stereotype.Repository;
@Repository
public class ChildDao extends AbstractHibernateDao<Child> implements IChildDao {
public ChildDao() {
super();
setClazz(Child.class);
}
// API
}
@@ -1,17 +0,0 @@
package com.baeldung.persistence.dao.impl;
import com.baeldung.persistence.dao.common.AbstractHibernateAuditableDao;
import com.baeldung.persistence.model.Foo;
import com.baeldung.persistence.dao.IFooAuditableDao;
public class FooAuditableDao extends AbstractHibernateAuditableDao<Foo> implements IFooAuditableDao {
public FooAuditableDao() {
super();
setClazz(Foo.class);
}
// API
}
@@ -6,9 +6,9 @@ import com.baeldung.persistence.model.Foo;
import org.springframework.stereotype.Repository;
@Repository
public class FooDao extends AbstractHibernateDao<Foo> implements IFooDao {
public class FooHibernateDao extends AbstractHibernateDao<Foo> implements IFooDao {
public FooDao() {
public FooHibernateDao() {
super();
setClazz(Foo.class);
@@ -1,19 +0,0 @@
package com.baeldung.persistence.dao.impl;
import com.baeldung.persistence.dao.IParentDao;
import com.baeldung.persistence.dao.common.AbstractHibernateDao;
import com.baeldung.persistence.model.Parent;
import org.springframework.stereotype.Repository;
@Repository
public class ParentDao extends AbstractHibernateDao<Parent> implements IParentDao {
public ParentDao() {
super();
setClazz(Parent.class);
}
// API
}
@@ -1,242 +0,0 @@
package com.baeldung.persistence.model;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;
import org.hibernate.annotations.OrderBy;
import org.hibernate.envers.Audited;
import org.jboss.logging.Logger;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import com.google.common.collect.Sets;
@Entity
@NamedQuery(name = "Bar.findAll", query = "SELECT b FROM Bar b")
@Audited
@EntityListeners(AuditingEntityListener.class)
public class Bar implements Serializable {
private static Logger logger = Logger.getLogger(Bar.class);
public enum OPERATION {
INSERT, UPDATE, DELETE;
private String value;
OPERATION() {
value = toString();
}
public String getValue() {
return value;
}
public static OPERATION parse(final String value) {
OPERATION operation = null;
for (final OPERATION op : OPERATION.values()) {
if (op.getValue().equals(value)) {
operation = op;
break;
}
}
return operation;
}
};
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "bar", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy(clause = "NAME DESC")
// @NotAudited
private Set<Foo> fooSet = Sets.newHashSet();
@Column(name = "operation")
private String operation;
@Column(name = "timestamp")
private long timestamp;
@Column(name = "created_date", updatable = false, nullable = false)
@CreatedDate
private long createdDate;
@Column(name = "modified_date")
@LastModifiedDate
private long modifiedDate;
@Column(name = "created_by")
@CreatedBy
private String createdBy;
@Column(name = "modified_by")
@LastModifiedBy
private String modifiedBy;
public Bar() {
super();
}
public Bar(final String name) {
super();
this.name = name;
}
// API
public Set<Foo> getFooSet() {
return fooSet;
}
public void setFooSet(final Set<Foo> fooSet) {
this.fooSet = fooSet;
}
public int getId() {
return id;
}
public void setId(final int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public OPERATION getOperation() {
return OPERATION.parse(operation);
}
public void setOperation(final OPERATION operation) {
this.operation = operation.getValue();
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(final long timestamp) {
this.timestamp = timestamp;
}
public long getCreatedDate() {
return createdDate;
}
public void setCreatedDate(final long createdDate) {
this.createdDate = createdDate;
}
public long getModifiedDate() {
return modifiedDate;
}
public void setModifiedDate(final long modifiedDate) {
this.modifiedDate = modifiedDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(final String createdBy) {
this.createdBy = createdBy;
}
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(final String modifiedBy) {
this.modifiedBy = modifiedBy;
}
public void setOperation(final String operation) {
this.operation = operation;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Bar other = (Bar) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("Bar [name=").append(name).append("]");
return builder.toString();
}
@PrePersist
public void onPrePersist() {
logger.info("@PrePersist");
audit(OPERATION.INSERT);
}
@PreUpdate
public void onPreUpdate() {
logger.info("@PreUpdate");
audit(OPERATION.UPDATE);
}
@PreRemove
public void onPreRemove() {
logger.info("@PreRemove");
audit(OPERATION.DELETE);
}
private void audit(final OPERATION operation) {
setOperation(operation);
setTimestamp((new Date()).getTime());
}
}
@@ -1,51 +0,0 @@
package com.baeldung.persistence.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Child implements Serializable {
@Id
@GeneratedValue
private long id;
@OneToOne(mappedBy = "child")
private Parent parent;
public Child() {
super();
}
// API
public long getId() {
return id;
}
public void setId(final long id) {
this.id = id;
}
public Parent getParent() {
return parent;
}
public void setParent(final Parent parent) {
this.parent = parent;
}
//
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("Child [id=").append(id).append("]");
return builder.toString();
}
}
@@ -1,25 +1,9 @@
package com.baeldung.persistence.model;
import javax.persistence.*;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import org.hibernate.envers.Audited;
@NamedNativeQueries({ @NamedNativeQuery(name = "callGetAllFoos", query = "CALL GetAllFoos()", resultClass = Foo.class), @NamedNativeQuery(name = "callGetFoosByName", query = "CALL GetFoosByName(:fooName)", resultClass = Foo.class) })
@Entity
@Audited
// @Proxy(lazy = false)
public class Foo implements Serializable {
@Id
@@ -30,10 +14,6 @@ public class Foo implements Serializable {
@Column(name = "name")
private String name;
@ManyToOne(targetEntity = Bar.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "BAR_ID")
private Bar bar = new Bar();
public Foo() {
super();
}
@@ -43,16 +23,6 @@ public class Foo implements Serializable {
this.name = name;
}
//
public Bar getBar() {
return bar;
}
public void setBar(final Bar bar) {
this.bar = bar;
}
public long getId() {
return id;
}
@@ -69,8 +39,6 @@ public class Foo implements Serializable {
this.name = name;
}
//
@Override
public int hashCode() {
final int prime = 31;

Some files were not shown because too many files have changed in this diff Show More