HHH-3828 Criteria: Restriction whith class does not work
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18658 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
d04362e464
commit
1904e02b63
|
@ -531,6 +531,14 @@ public class CriteriaQueryTranslator implements CriteriaQuery {
|
|||
if ( q != null ) {
|
||||
Type type = q.getDiscriminatorType();
|
||||
String stringValue = q.getDiscriminatorSQLValue();
|
||||
if (stringValue != null && stringValue.length() > 2
|
||||
&& stringValue.startsWith("'")
|
||||
&& stringValue.endsWith("'")) { // remove the single
|
||||
// quotes
|
||||
stringValue = stringValue.substring(1,
|
||||
stringValue.length() - 1);
|
||||
}
|
||||
|
||||
// Convert the string value into the proper type.
|
||||
if ( type instanceof NullableType ) {
|
||||
NullableType nullableType = ( NullableType ) type;
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Middleware LLC.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
* Lesser General Public License, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this distribution; if not, write to:
|
||||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
package org.hibernate.test.criteria;
|
||||
|
||||
|
||||
public abstract class AbstractFoo {
|
||||
|
||||
private Integer id;
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Middleware LLC.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
* Lesser General Public License, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this distribution; if not, write to:
|
||||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
package org.hibernate.test.criteria;
|
||||
|
||||
public class Bar {
|
||||
private Integer id;
|
||||
|
||||
AbstractFoo myFoo;
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public AbstractFoo getMyFoo() {
|
||||
return myFoo;
|
||||
}
|
||||
|
||||
public void setMyFoo(AbstractFoo myFoo) {
|
||||
this.myFoo = myFoo;
|
||||
}
|
||||
}
|
|
@ -41,7 +41,7 @@ public class CriteriaQueryTest extends FunctionalTestCase {
|
|||
}
|
||||
|
||||
public String[] getMappings() {
|
||||
return new String[] { "criteria/Enrolment.hbm.xml", "hql/Animal.hbm.xml" };
|
||||
return new String[] { "criteria/Enrolment.hbm.xml","criteria/Foo.hbm.xml", "hql/Animal.hbm.xml" };
|
||||
}
|
||||
|
||||
public void configure(Configuration cfg) {
|
||||
|
@ -707,6 +707,32 @@ public class CriteriaQueryTest extends FunctionalTestCase {
|
|||
s.close();
|
||||
}
|
||||
|
||||
public void testClassProperty2() {
|
||||
Session session = openSession();
|
||||
Transaction t = session.beginTransaction();
|
||||
GreatFoo foo = new GreatFoo();
|
||||
Bar b = new Bar();
|
||||
b.setMyFoo(foo);
|
||||
foo.setId(1);
|
||||
b.setId(1);
|
||||
session.persist(b);
|
||||
session.flush();
|
||||
t.commit();
|
||||
session=openSession();
|
||||
t=session.beginTransaction();
|
||||
// OK, one BAR in DB
|
||||
assertEquals(1, session.createCriteria(Bar.class).list().size());
|
||||
Criteria crit = session.createCriteria(Bar.class, "b").createAlias(
|
||||
"myFoo", "m").add(
|
||||
Property.forName("m.class").eq(GreatFoo.class));
|
||||
assertEquals(1, crit.list().size());
|
||||
crit = session.createCriteria(Bar.class, "b").createAlias("myFoo", "m")
|
||||
.add(Restrictions.eq("m.class", GreatFoo.class));
|
||||
assertEquals(1, crit.list().size());
|
||||
t.commit();
|
||||
session.close();
|
||||
}
|
||||
|
||||
public void testProjectedId() {
|
||||
Session s = openSession();
|
||||
Transaction t = s.beginTransaction();
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC
|
||||
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
|
||||
<hibernate-mapping package="org.hibernate.test.criteria">
|
||||
|
||||
<class name="AbstractFoo">
|
||||
<id name="id">
|
||||
</id>
|
||||
<discriminator type="string" column="subtype" />
|
||||
<subclass name="GreatFoo" discriminator-value="KAPUT">
|
||||
</subclass>
|
||||
</class>
|
||||
|
||||
<class name="Bar">
|
||||
<id name="id">
|
||||
</id>
|
||||
|
||||
<one-to-one name="myFoo" cascade="all" />
|
||||
</class>
|
||||
</hibernate-mapping>
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Middleware LLC.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
* Lesser General Public License, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this distribution; if not, write to:
|
||||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
package org.hibernate.test.criteria;
|
||||
|
||||
public class GreatFoo extends AbstractFoo {
|
||||
|
||||
}
|
Loading…
Reference in New Issue