HHH-9369 Fix @Formula of enum type results in ClassCastException
This commit is contained in:
parent
ca778258c8
commit
40efe9fc1c
|
@ -494,7 +494,10 @@ public class SimpleValue implements KeyValue {
|
||||||
try {
|
try {
|
||||||
String[] columnsNames = new String[columns.size()];
|
String[] columnsNames = new String[columns.size()];
|
||||||
for ( int i = 0; i < columns.size(); i++ ) {
|
for ( int i = 0; i < columns.size(); i++ ) {
|
||||||
columnsNames[i] = ( (Column) columns.get( i ) ).getName();
|
Selectable column = columns.get(i);
|
||||||
|
if (column instanceof Column){
|
||||||
|
columnsNames[i] = ((Column) column).getName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final XProperty xProperty = (XProperty) typeParameters.get( DynamicParameterizedType.XPROPERTY );
|
final XProperty xProperty = (XProperty) typeParameters.get( DynamicParameterizedType.XPROPERTY );
|
||||||
|
|
|
@ -7,6 +7,7 @@ import javax.persistence.Enumerated;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.Formula;
|
||||||
import org.hibernate.annotations.Type;
|
import org.hibernate.annotations.Type;
|
||||||
import org.hibernate.annotations.TypeDef;
|
import org.hibernate.annotations.TypeDef;
|
||||||
import org.hibernate.annotations.TypeDefs;
|
import org.hibernate.annotations.TypeDefs;
|
||||||
|
@ -54,6 +55,10 @@ public class EntityEnum {
|
||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
private Trimmed trimmed;
|
private Trimmed trimmed;
|
||||||
|
|
||||||
|
@Formula("(select 'A' from dual)")
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
private Trimmed formula;
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -109,4 +114,12 @@ public class EntityEnum {
|
||||||
public void setTrimmed(Trimmed trimmed) {
|
public void setTrimmed(Trimmed trimmed) {
|
||||||
this.trimmed = trimmed;
|
this.trimmed = trimmed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Trimmed getFormula() {
|
||||||
|
return formula;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormula(Trimmed formula) {
|
||||||
|
this.formula = formula;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -397,6 +397,28 @@ public class EnumeratedTypeTest extends BaseCoreFunctionalTestCase {
|
||||||
s.close();
|
s.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "HHH-9369")
|
||||||
|
public void testFormula() throws SQLException {
|
||||||
|
// use native SQL to insert, forcing whitespace to occur
|
||||||
|
final Session s = openSession();
|
||||||
|
final Connection connection = ((SessionImplementor)s).connection();
|
||||||
|
final Statement statement = connection.createStatement();
|
||||||
|
statement.execute("insert into EntityEnum (id) values(1)");
|
||||||
|
|
||||||
|
s.getTransaction().begin();
|
||||||
|
|
||||||
|
// ensure EnumType can do #fromName with the trimming
|
||||||
|
List<EntityEnum> resultList = s.createQuery("select e from EntityEnum e").list();
|
||||||
|
assertEquals( resultList.size(), 1 );
|
||||||
|
assertEquals( resultList.get(0).getFormula(), Trimmed.A );
|
||||||
|
|
||||||
|
statement.execute( "delete from EntityEnum" );
|
||||||
|
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class[] getAnnotatedClasses() {
|
protected Class[] getAnnotatedClasses() {
|
||||||
return new Class[] { EntityEnum.class };
|
return new Class[] { EntityEnum.class };
|
||||||
|
|
Loading…
Reference in New Issue