// Path: hibernate4-memcached-example/src/main/java/kr/pe/kwonnam/hibernate4memcached/example/entity/Author.java
// @Entity
// @Table(name = "authors")
// @org.hibernate.annotations.Cache(region = "authors", usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
// public class Author implements Serializable {
//     @Id
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     @Column(name="author_id", nullable = false)
//     private long id;
// 
//     @Column(name = "name", length = 32, nullable = false)
//     private String name;
// 
//     @Column(name = "country", length = 32, nullable = true)
//     private String country;
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getCountry() {
//         return country;
//     }
// 
//     public void setCountry(String country) {
//         this.country = country;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Author author = (Author) o;
// 
//         if (id != author.id) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return (int) (id ^ (id >>> 32));
//     }
// 
//     @Override
//     public String toString() {
//         return "Author{" +
//                 "id=" + id +
//                 ", name='" + name + '\'' +
//                 ", country='" + country + '\'' +
//                 '}';
//     }
// }


import kr.pe.kwonnam.hibernate4memcached.example.entity.Author;
import org.hibernate.Session;
import org.hibernate.ejb.HibernateEntityManagerFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.persistence.Cache;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;
import static org.fest.assertions.api.Assertions.assertThat;
package kr.pe.kwonnam.hibernate4memcached.example;




/**
 * Testing Query Cache
 */
public class QueryCacheTest {
	private Logger log = LoggerFactory.getLogger(QueryCacheTest.class);

	@Before
	public void setUp() throws Exception {
		EntityTestUtils.init();
	}

	@After
	public void tearDown() throws Exception {
		EntityTestUtils.destroy();
	}

// Path: hibernate4-memcached-example/src/main/java/kr/pe/kwonnam/hibernate4memcached/example/entity/Author.java
// @Entity
// @Table(name = "authors")
// @org.hibernate.annotations.Cache(region = "authors", usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
// public class Author implements Serializable {
//     @Id
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     @Column(name="author_id", nullable = false)
//     private long id;
// 
//     @Column(name = "name", length = 32, nullable = false)
//     private String name;
// 
//     @Column(name = "country", length = 32, nullable = true)
//     private String country;
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getCountry() {
//         return country;
//     }
// 
//     public void setCountry(String country) {
//         this.country = country;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Author author = (Author) o;
// 
//         if (id != author.id) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return (int) (id ^ (id >>> 32));
//     }
// 
//     @Override
//     public String toString() {
//         return "Author{" +
//                 "id=" + id +
//                 ", name='" + name + '\'' +
//                 ", country='" + country + '\'' +
//                 '}';
//     }
// }


// Path: hibernate4-memcached-example/src/test/java/kr/pe/kwonnam/hibernate4memcached/example/QueryCacheTest.java
import kr.pe.kwonnam.hibernate4memcached.example.entity.Author;
import org.hibernate.Session;
import org.hibernate.ejb.HibernateEntityManagerFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.persistence.Cache;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;
import static org.fest.assertions.api.Assertions.assertThat;

package kr.pe.kwonnam.hibernate4memcached.example;




/**
 * Testing Query Cache
 */
public class QueryCacheTest {
	private Logger log = LoggerFactory.getLogger(QueryCacheTest.class);

	@Before
	public void setUp() throws Exception {
		EntityTestUtils.init();
	}

	@After
	public void tearDown() throws Exception {
		EntityTestUtils.destroy();
	}

	private List<Author> getAuthorsWithQuery(String logMessage, String country) {