HHH-11971 - Add test for issue

This commit is contained in:
Andrea Boriero 2017-10-14 17:23:23 +01:00
parent a77c48dc11
commit 4979241a1d
1 changed files with 106 additions and 0 deletions

View File

@ -6,15 +6,25 @@
*/
package org.hibernate.jpa.test.query;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.annotations.Type;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.usertype.UserType;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
@ -66,11 +76,107 @@ public class QueryParametersValidationTest extends BaseEntityManagerFunctionalTe
}
}
@Test
@TestForIssue(jiraKey = "HHH-11971")
public void setPrimitiveParameterShouldNotThrowExceptions() {
final EntityManager entityManager = entityManagerFactory().createEntityManager();
try {
entityManager.createQuery( "select e from TestEntity e where e.active = :active" ).setParameter(
"active",
true
);
entityManager.createQuery( "select e from TestEntity e where e.active = :active" ).setParameter(
"active",
Boolean.TRUE
);
}
finally {
entityManager.close();
}
}
@Test(expected = IllegalArgumentException.class)
@TestForIssue( jiraKey = "HHH-11971")
public void setWrongPrimitiveParameterShouldThrowIllegalArgumentException() {
final EntityManager entityManager = entityManagerFactory().createEntityManager();
try {
entityManager.createQuery( "select e from TestEntity e where e.active = :active" ).setParameter( "active", 'c' );
}
finally {
entityManager.close();
}
}
@Entity(name = "TestEntity")
public class TestEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Type(type = "org.hibernate.jpa.test.query.QueryParametersValidationTest$BooleanUserType")
private boolean active;
}
public static class BooleanUserType implements UserType {
@Override
public int[] sqlTypes() {
return new int[] { Types.CHAR };
}
@Override
public Class returnedClass() {
return boolean.class;
}
@Override
public boolean equals(Object x, Object y) throws HibernateException {
return Objects.equals( x, y);
}
@Override
public int hashCode(Object x) throws HibernateException {
return Objects.hashCode(x);
}
@Override
public Object nullSafeGet(
ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner)
throws HibernateException, SQLException {
return "Y".equals(rs.getString(names[0]));
}
@Override
public void nullSafeSet(
PreparedStatement st, Object value, int index, SharedSessionContractImplementor session)
throws HibernateException, SQLException {
st.setString(index, ((Boolean) value).booleanValue() ? "Y" : "N");
}
@Override
public Object deepCopy(Object value) throws HibernateException {
return value;
}
@Override
public boolean isMutable() {
return false;
}
@Override
public Serializable disassemble(Object value) throws HibernateException {
return null;
}
@Override
public Object assemble(Serializable cached, Object owner) throws HibernateException {
return null;
}
@Override
public Object replace(Object original, Object target, Object owner) throws HibernateException {
return null;
}
}
}