HHH-5817 : Passing char[] or byte[] to equal function of CriteriaBuilder throws ClassCastException (Vyacheslav Dimitrov))
This commit is contained in:
parent
644eaf424a
commit
287f67d0b4
|
@ -344,7 +344,7 @@ public abstract class AbstractQueryImpl<X> implements TypedQuery<X> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( value.getClass().isArray() ) {
|
else if ( value.getClass().isArray() && value.getClass().equals( Object[].class ) ) {
|
||||||
final Object[] array = (Object[]) value;
|
final Object[] array = (Object[]) value;
|
||||||
for ( Object element : array ) {
|
for ( Object element : array ) {
|
||||||
if ( ! parameter.getParameterType().isInstance( element ) ) {
|
if ( ! parameter.getParameterType().isInstance( element ) ) {
|
||||||
|
|
|
@ -151,7 +151,39 @@ public class PredicateTest extends AbstractMetamodelSpecificTest {
|
||||||
em.getTransaction().begin();
|
em.getTransaction().begin();
|
||||||
em.persist( new Order( "order-1", 1.0d ) );
|
em.persist( new Order( "order-1", 1.0d ) );
|
||||||
em.persist( new Order( "order-2", 10.0d ) );
|
em.persist( new Order( "order-2", 10.0d ) );
|
||||||
em.persist( new Order( "order-3", 100.0d ) );
|
em.persist( new Order( "order-3", new char[]{'r','u'} ) );
|
||||||
em.getTransaction().commit();
|
em.getTransaction().commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check predicate for field which has simple char array type (char[]).
|
||||||
|
*/
|
||||||
|
public void testCharArray() {
|
||||||
|
CriteriaQuery<Order> orderCriteria = builder.createQuery( Order.class );
|
||||||
|
Root<Order> orderRoot = orderCriteria.from( Order.class );
|
||||||
|
|
||||||
|
orderCriteria.select( orderRoot );
|
||||||
|
Predicate p = builder.equal( orderRoot.get( "domen" ), new char[]{'r','u'} );
|
||||||
|
orderCriteria.where( p );
|
||||||
|
|
||||||
|
List<Order> orders = em.createQuery( orderCriteria ).getResultList();
|
||||||
|
assertTrue( orders.size() == 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check predicate for field which has simple char array type (byte[]).
|
||||||
|
*/
|
||||||
|
public void testByteArray() {
|
||||||
|
CriteriaQuery<Order> orderCriteria = builder.createQuery( Order.class );
|
||||||
|
Root<Order> orderRoot = orderCriteria.from( Order.class );
|
||||||
|
|
||||||
|
orderCriteria.select( orderRoot );
|
||||||
|
Predicate p = builder.equal( orderRoot.get( "number" ), new byte[]{'1','2'} );
|
||||||
|
orderCriteria.where( p );
|
||||||
|
|
||||||
|
List<Order> orders = em.createQuery( orderCriteria ).getResultList();
|
||||||
|
assertTrue( orders.size() == 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,9 @@ public class Order implements java.io.Serializable {
|
||||||
private LineItem sampleLineItem;
|
private LineItem sampleLineItem;
|
||||||
private Collection<LineItem> lineItems = new java.util.ArrayList<LineItem>();
|
private Collection<LineItem> lineItems = new java.util.ArrayList<LineItem>();
|
||||||
|
|
||||||
|
private char[] domen;
|
||||||
|
private byte[] number;
|
||||||
|
|
||||||
public Order() {
|
public Order() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +65,12 @@ public class Order implements java.io.Serializable {
|
||||||
this.customer = customer;
|
this.customer = customer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Order(String id, char[] domen) {
|
||||||
|
this.id = id;
|
||||||
|
this.domen = domen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public Order(String id) {
|
public Order(String id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
@ -138,4 +147,22 @@ public class Order implements java.io.Serializable {
|
||||||
public void setLineItems(Collection<LineItem> c) {
|
public void setLineItems(Collection<LineItem> c) {
|
||||||
this.lineItems = c;
|
this.lineItems = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public char[] getDomen() {
|
||||||
|
return domen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomen(char[] d) {
|
||||||
|
domen = d;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumber(byte[] n) {
|
||||||
|
number = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue