HHH-11250 - Added test case.

This commit is contained in:
Chris Cranford 2016-11-16 13:06:20 -05:00
parent 2e49586adc
commit 1d294cb23d

View File

@ -0,0 +1,217 @@
/*
* 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.filter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Filter;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.FilterDefs;
import org.hibernate.annotations.Filters;
import org.hibernate.annotations.ParamDef;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.hibernate.testing.transaction.TransactionUtil;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Chris Cranford
*/
@TestForIssue(jiraKey = "HHH-11250")
public class FilterDotNameTest extends BaseCoreFunctionalTestCase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { PurchaseOrder.class, PurchaseItem.class };
}
@Override
protected void prepareTest() throws Exception {
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
session.createQuery( "DELETE FROM PurchaseItem" ).executeUpdate();
session.createQuery( "DELETE FROM PurchaseOrder" ).executeUpdate();
session.flush();
} );
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
PurchaseOrder order1 = new PurchaseOrder( 1L, 10L, 1000L );
Set<PurchaseItem> items1 = new HashSet<>();
items1.add( new PurchaseItem( 1L, 100L, order1 ) );
items1.add( new PurchaseItem( 2L, 200L, order1 ) );
order1.setPurchaseItems( items1 );
session.persist( order1 );
PurchaseOrder order2 = new PurchaseOrder( 2L, 20L, 2000L );
Set<PurchaseItem> items2 = new HashSet<>();
items2.add( new PurchaseItem( 3L, 300L, order2 ) );
items2.add( new PurchaseItem( 4L, 400L, order2 ) );
order2.setPurchaseItems( items2 );
session.persist( order2 );
} );
}
@Test
public void testEntityFilterNameWithoutDots() {
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
session.enableFilter( "customerIdFilter" ).setParameter( "customerId", 10L );
List<PurchaseOrder> orders = session.createQuery( "FROM PurchaseOrder", PurchaseOrder.class ).getResultList();
assertEquals( 1, orders.size() );
} );
}
@Test
public void testEntityFilterNameWithDots() {
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
session.enableFilter( "PurchaseOrder.customerIdFilter" ).setParameter( "customerId", 20L );
List<PurchaseOrder> orders = session.createQuery( "FROM PurchaseOrder", PurchaseOrder.class ).getResultList();
assertEquals( 1, orders.size() );
} );
}
@Test
public void testCollectionFilterNameWithoutDots() {
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
session.enableFilter( "itemIdFilter" ).setParameter( "itemId", 100L );
PurchaseOrder order = session.get( PurchaseOrder.class, 1L );
assertEquals( 1, order.getPurchaseItems().size() );
} );
}
@Test
public void testCollectionFilterNameWithDots() {
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
session.enableFilter( "PurchaseOrder.itemIdFilter" ).setParameter( "itemId", 100L );
PurchaseOrder order = session.get( PurchaseOrder.class, 1L );
assertEquals( 1, order.getPurchaseItems().size() );
} );
}
@Entity(name = "PurchaseOrder")
@FilterDefs({
@FilterDef(name = "customerIdFilter", parameters = @ParamDef(name = "customerId", type = "long")),
@FilterDef(name = "PurchaseOrder.customerIdFilter", parameters = @ParamDef(name = "customerId", type = "long")),
@FilterDef(name = "itemIdFilter", parameters = @ParamDef(name = "itemId", type = "long")),
@FilterDef(name = "PurchaseOrder.itemIdFilter", parameters = @ParamDef(name = "itemId", type = "long"))
})
@Filters({
@Filter(name = "customerIdFilter", condition = "customerId = :customerId"),
@Filter(name = "PurchaseOrder.customerIdFilter", condition = "customerId = :customerId")
})
public static class PurchaseOrder {
@Id
private Long purchaseOrderId;
private Long customerId;
private Long totalAmount;
@OneToMany(mappedBy = "purchaseOrder", cascade = CascadeType.PERSIST)
@Filters({
@Filter(name = "itemIdFilter", condition = "itemId = :itemId"),
@Filter(name = "PurchaseOrder.itemIdFilter", condition = "itemId = :itemId")
})
private Set<PurchaseItem> purchaseItems;
public PurchaseOrder() {
}
public PurchaseOrder(Long purchaseOrderId, Long customerId, Long totalAmount) {
this.purchaseOrderId = purchaseOrderId;
this.customerId = customerId;
this.totalAmount = totalAmount;
}
public Long getPurchaseOrderId() {
return purchaseOrderId;
}
public void setPurchaseOrderId(Long purchaseOrderId) {
this.purchaseOrderId = purchaseOrderId;
}
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public Long getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(Long totalAmount) {
this.totalAmount = totalAmount;
}
public Set<PurchaseItem> getPurchaseItems() {
return purchaseItems;
}
public void setPurchaseItems(Set<PurchaseItem> purchaseItems) {
this.purchaseItems = purchaseItems;
}
}
@Entity(name = "PurchaseItem")
public static class PurchaseItem {
@Id
private Long purchaseItemId;
private Long itemId;
@ManyToOne
@JoinColumn(name = "purchaseOrderId")
private PurchaseOrder purchaseOrder;
public PurchaseItem() {
}
public PurchaseItem(Long purchaseItemId, Long itemId, PurchaseOrder purchaseOrder) {
this.purchaseItemId = purchaseItemId;
this.itemId = itemId;
this.purchaseOrder = purchaseOrder;
}
public Long getPurchaseItemId() {
return purchaseItemId;
}
public void setPurchaseItemId(Long purchaseItemId) {
this.purchaseItemId = purchaseItemId;
}
public Long getItemId() {
return itemId;
}
public void setItemId(Long itemId) {
this.itemId = itemId;
}
public PurchaseOrder getPurchaseOrder() {
return purchaseOrder;
}
public void setPurchaseOrder(PurchaseOrder purchaseOrder) {
this.purchaseOrder = purchaseOrder;
}
}
}