/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.test.bytecode.enhancement.lazy.cache; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Type; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; import org.hibernate.test.bytecode.enhancement.AbstractEnhancerTestTask; import org.junit.Assert; import javax.persistence.Basic; import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import java.util.ArrayList; import java.util.List; /** * @author Luis Barreiro */ public class LazyInCacheTestTask extends AbstractEnhancerTestTask { public Class<?>[] getAnnotatedClasses() { return new Class<?>[]{Order.class, Product.class, Tag.class}; } public void prepare() { Configuration cfg = new Configuration(); cfg.setProperty( Environment.ENABLE_LAZY_LOAD_NO_TRANS, "true" ); cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "true" ); prepare( cfg ); } public void execute() { EntityManager entityManager = getFactory().createEntityManager(); Order order = new Order(); Product product = new Product(); order.products.add( product ); order.data = "some data".getBytes(); entityManager.getTransaction().begin(); entityManager.persist( product ); entityManager.persist( order ); entityManager.getTransaction().commit(); long orderId = order.id; entityManager = getFactory().createEntityManager(); order = entityManager.find( Order.class, orderId ); Assert.assertEquals( 1, order.products.size() ); entityManager.close(); } protected void cleanup() { } @Entity(name = "Order") @Table(name = "ORDERS") @Cache( usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE ) public static class Order { @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) long id; @OneToMany List<Product> products = new ArrayList<>(); @OneToMany List<Tag> tags = new ArrayList<>(); @Basic( fetch = FetchType.LAZY ) @Type( type = "org.hibernate.type.BinaryType" ) private byte[] data; } @Entity(name = "Product") public static class Product { @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) long id; String name; } @Entity(name = "Tag") public class Tag { @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) long id; String name; } }