mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-26 05:14:57 +00:00
HHH-11250 - Added test case.
This commit is contained in:
parent
2e49586adc
commit
1d294cb23d
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user