HHH-4895 - query against derived id doesn't return expected result
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18754 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
c833f33812
commit
0255bb79fc
|
@ -1,5 +1,6 @@
|
||||||
package org.hibernate.test.annotations.derivedidentities.e1.a;
|
package org.hibernate.test.annotations.derivedidentities.e1.a;
|
||||||
|
|
||||||
|
import org.hibernate.Query;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.test.annotations.TestCase;
|
import org.hibernate.test.annotations.TestCase;
|
||||||
import org.hibernate.test.util.SchemaUtil;
|
import org.hibernate.test.util.SchemaUtil;
|
||||||
|
@ -50,14 +51,11 @@ public class DerivedIdentitySimpleParentIdClassDepTest extends TestCase {
|
||||||
// List depList = s.createQuery("Select d from Dependent d where d.name='LittleP'").list();
|
// List depList = s.createQuery("Select d from Dependent d where d.name='LittleP'").list();
|
||||||
|
|
||||||
// the following query is not finding the entity 'd' added above
|
// the following query is not finding the entity 'd' added above
|
||||||
List depList = s.createQuery("Select d from Dependent d where d.name='LittleP' and d.emp.name='Paula'").list();
|
Query query = s.createQuery("Select d from Dependent d where d.name='LittleP' and d.emp.empName='Paula'");
|
||||||
Object newDependent = null;
|
List depList = query.list();
|
||||||
if (depList.size() > 0) {
|
assertEquals( 1, depList.size() );
|
||||||
newDependent = (Dependent) depList.get(0);
|
Object newDependent = (Dependent) depList.get(0);
|
||||||
}
|
assertSame( d, newDependent );
|
||||||
if (newDependent != d) {
|
|
||||||
fail("PC entity instance (" + d +") does not match returned query result value (" + newDependent);
|
|
||||||
}
|
|
||||||
s.getTransaction().rollback();
|
s.getTransaction().rollback();
|
||||||
s.close();
|
s.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ log4j.logger.org.hibernate.SQL=debug
|
||||||
#log4j.logger.org.hibernate.engine.CascadingAction=debug
|
#log4j.logger.org.hibernate.engine.CascadingAction=debug
|
||||||
|
|
||||||
### log JDBC bind parameters ###
|
### log JDBC bind parameters ###
|
||||||
log4j.logger.org.hibernate.type=debug
|
log4j.logger.org.hibernate.type=trace
|
||||||
|
|
||||||
### log schema export/update ###
|
### log schema export/update ###
|
||||||
log4j.logger.org.hibernate.tool.hbm2ddl=debug
|
log4j.logger.org.hibernate.tool.hbm2ddl=debug
|
||||||
|
|
|
@ -27,6 +27,9 @@ package org.hibernate.persister.entity;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.QueryException;
|
import org.hibernate.QueryException;
|
||||||
import org.hibernate.engine.Mapping;
|
import org.hibernate.engine.Mapping;
|
||||||
|
@ -44,6 +47,7 @@ import org.hibernate.util.StringHelper;
|
||||||
* @author Gavin King
|
* @author Gavin King
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractPropertyMapping implements PropertyMapping {
|
public abstract class AbstractPropertyMapping implements PropertyMapping {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger( AbstractPropertyMapping.class );
|
||||||
|
|
||||||
private final Map typesByPropertyPath = new HashMap();
|
private final Map typesByPropertyPath = new HashMap();
|
||||||
private final Map columnsByPropertyPath = new HashMap();
|
private final Map columnsByPropertyPath = new HashMap();
|
||||||
|
@ -124,9 +128,24 @@ public abstract class AbstractPropertyMapping implements PropertyMapping {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addPropertyPath(String path, Type type, String[] columns,
|
protected void addPropertyPath(
|
||||||
String[] columnReaders, String[] columnReaderTemplates,
|
String path,
|
||||||
|
Type type,
|
||||||
|
String[] columns,
|
||||||
|
String[] columnReaders,
|
||||||
|
String[] columnReaderTemplates,
|
||||||
String[] formulaTemplates) {
|
String[] formulaTemplates) {
|
||||||
|
// TODO : not quite sure yet of the difference, but this is only needed from annotations for @Id @ManyToOne support
|
||||||
|
if ( typesByPropertyPath.containsKey( path ) ) {
|
||||||
|
if ( log.isTraceEnabled() ) {
|
||||||
|
log.trace(
|
||||||
|
"Skipping duplicate registration of path [" + path
|
||||||
|
+ "], existing type = [" + typesByPropertyPath.get(path)
|
||||||
|
+ "], incoming type = [" + type + "]"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
typesByPropertyPath.put(path, type);
|
typesByPropertyPath.put(path, type);
|
||||||
columnsByPropertyPath.put(path, columns);
|
columnsByPropertyPath.put(path, columns);
|
||||||
columnReadersByPropertyPath.put(path, columnReaders);
|
columnReadersByPropertyPath.put(path, columnReaders);
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.hibernate.test.keymanytoone.bidir.component;
|
package org.hibernate.test.keymanytoone.bidir.component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.hibernate.test.keymanytoone.bidir.component;
|
package org.hibernate.test.keymanytoone.bidir.component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
|
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
|
@ -29,6 +31,32 @@ public class LazyKeyManyToOneTest extends FunctionalTestCase {
|
||||||
cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
|
cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testQueryingOnMany2One() {
|
||||||
|
Session s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
Customer cust = new Customer( "Acme, Inc." );
|
||||||
|
Order order = new Order( new Order.Id( cust, 1 ) );
|
||||||
|
cust.getOrders().add( order );
|
||||||
|
s.save( cust );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
List results = s.createQuery( "from Order o where o.id.customer.name = :name" )
|
||||||
|
.setParameter( "name", cust.getName() )
|
||||||
|
.list();
|
||||||
|
assertEquals( 1, results.size() );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
s.delete( cust );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
|
||||||
public void testSaveCascadedToKeyManyToOne() {
|
public void testSaveCascadedToKeyManyToOne() {
|
||||||
// test cascading a save to an association with a key-many-to-one which refers to a
|
// test cascading a save to an association with a key-many-to-one which refers to a
|
||||||
// just saved entity
|
// just saved entity
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.hibernate.test.keymanytoone.bidir.embedded;
|
package org.hibernate.test.keymanytoone.bidir.embedded;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
|
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
|
@ -45,6 +47,32 @@ public class KeyManyToOneTest extends FunctionalTestCase {
|
||||||
s.close();
|
s.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testQueryingOnMany2One() {
|
||||||
|
Session s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
Customer cust = new Customer( "Acme, Inc." );
|
||||||
|
Order order = new Order( cust, 1 );
|
||||||
|
cust.getOrders().add( order );
|
||||||
|
s.save( cust );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
List results = s.createQuery( "from Order o where o.customer.name = :name" )
|
||||||
|
.setParameter( "name", cust.getName() )
|
||||||
|
.list();
|
||||||
|
assertEquals( 1, results.size() );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
s.delete( cust );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
|
||||||
public void testLoadingStrategies() {
|
public void testLoadingStrategies() {
|
||||||
Session s = openSession();
|
Session s = openSession();
|
||||||
s.beginTransaction();
|
s.beginTransaction();
|
||||||
|
|
Loading…
Reference in New Issue