Hibernate SVN: r19219 - in core/trunk/entitymanager/src: test/java/org/hibernate/ejb/test and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-04-13 09:35:38 -0400 (Tue, 13 Apr 2010)
New Revision: 19219
Modified:
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/Item.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/query/QueryTest.java
Log:
HHH-5106 add support for SQL Named Typed-Query
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2010-04-13 08:51:33 UTC (rev 19218)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2010-04-13 13:35:38 UTC (rev 19219)
@@ -93,12 +93,17 @@
import org.hibernate.ejb.util.CacheModeHelper;
import org.hibernate.ejb.util.ConfigurationHelper;
import org.hibernate.ejb.util.LockModeTypeHelper;
+import org.hibernate.engine.NamedSQLQueryDefinition;
+import org.hibernate.engine.ResultSetMappingDefinition;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.query.sql.NativeSQLQueryReturn;
+import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.transaction.TransactionFactory;
import org.hibernate.transform.BasicTransformerAdapter;
import org.hibernate.util.JTAHelper;
+import org.hibernate.util.ReflectHelper;
/**
* @author <a href="mailto:gavin@hibernate.org">Gavin King</a>
@@ -449,18 +454,60 @@
public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass) {
try {
+ /*
+ * Get the named query.
+ * If the named query is a SQL query, get the expected returned type from the query definition
+ * or its associated result set mapping
+ * If the named query is a HQL query, use getReturnType()
+ */
org.hibernate.Query namedQuery = getSession().getNamedQuery( name );
+ //TODO clean this up to avoid downcasting
+ final SessionFactoryImplementor factoryImplementor = ( SessionFactoryImplementor ) entityManagerFactory.getSessionFactory();
+ final NamedSQLQueryDefinition queryDefinition = factoryImplementor.getNamedSQLQuery( name );
try {
- if ( namedQuery.getReturnTypes().length != 1 ) {
- throw new IllegalArgumentException( "Cannot create TypedQuery for query with more than one return" );
+ if ( queryDefinition != null ) {
+ Class<?> actualReturnedClass;
+
+ final NativeSQLQueryReturn[] queryReturns;
+ if ( queryDefinition.getQueryReturns() != null ) {
+ queryReturns = queryDefinition.getQueryReturns();
+ }
+ else if ( queryDefinition.getResultSetRef() != null ) {
+ final ResultSetMappingDefinition rsMapping = factoryImplementor.getResultSetMapping(
+ queryDefinition.getResultSetRef()
+ );
+ queryReturns = rsMapping.getQueryReturns();
+ }
+ else {
+ throw new AssertionFailure( "Unsupported named query model. Please report the bug in Hibernate EntityManager");
+ }
+ if ( queryReturns.length > 1 ) {
+ throw new IllegalArgumentException( "Cannot create TypedQuery for query with more than one return" );
+ }
+ final NativeSQLQueryReturn nativeSQLQueryReturn = queryReturns[0];
+ if ( nativeSQLQueryReturn instanceof NativeSQLQueryRootReturn ) {
+ final String entityClassName = ( ( NativeSQLQueryRootReturn ) nativeSQLQueryReturn ).getReturnEntityName();
+ try {
+ actualReturnedClass = ReflectHelper.classForName( entityClassName, AbstractEntityManagerImpl.class );
+ }
+ catch ( ClassNotFoundException e ) {
+ throw new AssertionFailure( "Unable to instantiate class declared on named native query: " + name + " " + entityClassName );
+ }
+ if ( !resultClass.isAssignableFrom( actualReturnedClass ) ) {
+ throw buildIncompatibleException( resultClass, actualReturnedClass );
+ }
+ }
+ else {
+ //TODO support other NativeSQLQueryReturn type. For now let it go.
+ }
}
- if ( !resultClass.isAssignableFrom( namedQuery.getReturnTypes()[0].getReturnedClass() ) ) {
- throw new IllegalArgumentException(
- "Type specified for TypedQuery [" +
- resultClass.getName() +
- "] is incompatible with query return type [" +
- namedQuery.getReturnTypes()[0].getReturnedClass() + "]"
- );
+ else {
+ if ( namedQuery.getReturnTypes().length != 1 ) {
+ throw new IllegalArgumentException( "Cannot create TypedQuery for query with more than one return" );
+ }
+ if ( !resultClass.isAssignableFrom( namedQuery.getReturnTypes()[0].getReturnedClass() ) ) {
+ throw buildIncompatibleException( resultClass, namedQuery.getReturnTypes()[0].getReturnedClass() );
+ }
}
return new QueryImpl<T>( namedQuery, this );
}
@@ -473,6 +520,15 @@
}
}
+ private IllegalArgumentException buildIncompatibleException(Class<?> resultClass, Class<?> actualResultClass) {
+ return new IllegalArgumentException(
+ "Type specified for TypedQuery [" +
+ resultClass.getName() +
+ "] is incompatible with query return type [" +
+ actualResultClass + "]"
+ );
+ }
+
public Query createNativeQuery(String sqlString) {
try {
SQLQuery q = getSession().createSQLQuery( sqlString );
Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/Item.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/Item.java 2010-04-13 08:51:33 UTC (rev 19218)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/Item.java 2010-04-13 13:35:38 UTC (rev 19219)
@@ -9,6 +9,9 @@
import javax.persistence.EntityResult;
import javax.persistence.FieldResult;
import javax.persistence.Id;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SqlResultSetMapping;
@@ -16,12 +19,24 @@
* @author Gavin King
*/
@Entity(name = "Item")
-@SqlResultSetMapping(name = "getItem", entities =
-@EntityResult(entityClass = org.hibernate.ejb.test.Item.class, fields = {
-@FieldResult(name = "name", column = "itemname"),
-@FieldResult(name = "descr", column = "itemdescription")
- })
+ @SqlResultSetMapping(name = "getItem", entities =
+ @EntityResult(entityClass = org.hibernate.ejb.test.Item.class, fields = {
+ @FieldResult(name = "name", column = "itemname"),
+ @FieldResult(name = "descr", column = "itemdescription")
+ })
)
+@NamedNativeQueries({
+ @NamedNativeQuery(
+ name = "nativeItem1",
+ query = "select name as itemname, descr as itemdescription from Item",
+ resultSetMapping = "getItem"
+ ),
+ @NamedNativeQuery(
+ name = "nativeItem2",
+ query = "select * from Item",
+ resultClass = Item.class
+ )
+})
//@Cache(region="Item", usage=NONSTRICT_READ_WRITE)
public class Item implements Serializable {
Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/query/QueryTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/query/QueryTest.java 2010-04-13 08:51:33 UTC (rev 19218)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/query/QueryTest.java 2010-04-13 13:35:38 UTC (rev 19219)
@@ -435,6 +435,26 @@
}
+ public void testTypedNamedNativeQuery() {
+ Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+ EntityManager em = getOrCreateEntityManager();
+ em.getTransaction().begin();
+ em.persist( item );
+ assertTrue( em.contains( item ) );
+ em.getTransaction().commit();
+
+ em.getTransaction().begin();
+ item = em.createNamedQuery( "nativeItem1", Item.class ).getSingleResult();
+ item = em.createNamedQuery( "nativeItem2", Item.class ).getSingleResult();
+ assertNotNull( item );
+ assertEquals( "Micro$oft mouse", item.getDescr() );
+ em.remove( item );
+ em.getTransaction().commit();
+
+ em.close();
+ }
+
public Class[] getAnnotatedClasses() {
return new Class[]{
Item.class,
16 years
Hibernate SVN: r19218 - in core/trunk/annotations/src: test/java/org/hibernate/test/annotations/join and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: stliu
Date: 2010-04-13 04:51:33 -0400 (Tue, 13 Apr 2010)
New Revision: 19218
Added:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysGroupsOrm.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysUserOrm.java
Modified:
core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/JoinTest.java
Log:
HHH-5103 Specifying the referencedColumnName in a @JoinColumn in backtics like fails
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java 2010-04-12 18:21:12 UTC (rev 19217)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java 2010-04-13 08:51:33 UTC (rev 19218)
@@ -446,7 +446,7 @@
String referencedColumn = joinCol.getReferencedColumn();
referencedColumn = mappings.getPhysicalColumnName( referencedColumn, table );
//In JPA 2 referencedColumnName is case insensitive
- if ( referencedColumn.equalsIgnoreCase( col.getName() ) ) {
+ if ( referencedColumn.equalsIgnoreCase( col.getQuotedName() ) ) {
//proper join column
if ( joinCol.isNameDeferred() ) {
joinCol.linkValueUsingDefaultColumnNaming(
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/JoinTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/JoinTest.java 2010-04-12 18:21:12 UTC (rev 19217)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/JoinTest.java 2010-04-13 08:51:33 UTC (rev 19218)
@@ -1,6 +1,7 @@
//$Id$
package org.hibernate.test.annotations.join;
+import java.util.ArrayList;
import java.util.Date;
import org.hibernate.Criteria;
@@ -114,7 +115,20 @@
tx.commit();
s.close();
}
-
+
+ public void testReferenceColumnWithBacktics() throws Exception {
+ Session s=openSession();
+ s.beginTransaction();
+ SysGroupsOrm g=new SysGroupsOrm();
+ SysUserOrm u=new SysUserOrm();
+ u.setGroups( new ArrayList<SysGroupsOrm>() );
+ u.getGroups().add( g );
+ s.save( g );
+ s.save( u );
+ s.getTransaction().commit();
+ s.close();
+ }
+
public void testUniqueConstaintOnSecondaryTable() throws Exception {
Cat cat = new Cat();
cat.setStoryPart2( "My long story" );
@@ -200,7 +214,9 @@
Dog.class,
A.class,
B.class,
- C.class
+ C.class,
+ SysGroupsOrm.class,
+ SysUserOrm.class
};
}
}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysGroupsOrm.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysGroupsOrm.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysGroupsOrm.java 2010-04-13 08:51:33 UTC (rev 19218)
@@ -0,0 +1,27 @@
+package org.hibernate.test.annotations.join;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table( name = "SYS_GROUPS" )
+public class SysGroupsOrm {
+
+ private long groupId;
+
+ @Id
+ @GeneratedValue
+ @Column( name = "GROUPID" )
+ public long getGroupId() {
+ return groupId;
+ }
+
+ public void setGroupId( long groupId ) {
+ this.groupId = groupId;
+ }
+
+}
\ No newline at end of file
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysUserOrm.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysUserOrm.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/join/SysUserOrm.java 2010-04-13 08:51:33 UTC (rev 19218)
@@ -0,0 +1,46 @@
+package org.hibernate.test.annotations.join;
+
+import java.util.Collection;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.Table;
+
+@Entity( name = "sys_user" )
+@Table( name = "SYS_USER" )
+public class SysUserOrm {
+
+ private long userid;
+
+ private Collection<SysGroupsOrm> groups;
+
+ @Id
+ @GeneratedValue
+ @Column( name = "`auid`" )
+ public long getUserid() {
+ return userid;
+ }
+
+ public void setUserid( long userid ) {
+ this.userid = userid;
+ }
+
+ @ManyToMany( fetch = FetchType.LAZY )
+ @JoinTable( name = "SYS_GROUPS_USERS",
+ joinColumns = @JoinColumn( name = "USERID", referencedColumnName = "`auid`" ),
+ inverseJoinColumns = @JoinColumn( name = "GROUPID", referencedColumnName = "GROUPID" ) )
+ public Collection<SysGroupsOrm> getGroups() {
+ return groups;
+ }
+
+ public void setGroups( Collection<SysGroupsOrm> groups ) {
+ this.groups = groups;
+ }
+}
16 years
Hibernate SVN: r19217 - in core/trunk: testsuite/src/test/java/org/hibernate/test/hql and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: gbadner
Date: 2010-04-12 14:21:12 -0400 (Mon, 12 Apr 2010)
New Revision: 19217
Modified:
core/trunk/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java
core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java
Log:
HHH-1804 HHH-5096 : FetchingScrollableResultsImpl throws SQLException when empty; last() does not move cursor if it is after last
Modified: core/trunk/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java 2010-04-12 18:20:20 UTC (rev 19216)
+++ core/trunk/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java 2010-04-12 18:21:12 UTC (rev 19217)
@@ -75,6 +75,12 @@
return false;
}
+ if ( isResultSetEmpty() ) {
+ currentRow = null;
+ currentPosition = 0;
+ return false;
+ }
+
Object row = getLoader().loadSequentialRowsForward(
getResultSet(),
getSession(),
@@ -183,13 +189,16 @@
public boolean last() throws HibernateException {
boolean more = false;
if ( maxPosition != null ) {
+ if ( currentPosition > maxPosition.intValue() ) {
+ more = previous();
+ }
for ( int i = currentPosition; i < maxPosition.intValue(); i++ ) {
more = next();
}
}
else {
try {
- if ( getResultSet().isAfterLast() ) {
+ if ( isResultSetEmpty() || getResultSet().isAfterLast() ) {
// should not be able to reach last without maxPosition being set
// unless there are no results
return false;
@@ -313,4 +322,18 @@
}
return scroll( rowNumber - currentPosition );
}
+
+ private boolean isResultSetEmpty() {
+ try {
+ return currentPosition == 0 && ! getResultSet().isBeforeFirst() && ! getResultSet().isAfterLast();
+ }
+ catch( SQLException e ) {
+ throw JDBCExceptionHelper.convert(
+ getSession().getFactory().getSQLExceptionConverter(),
+ e,
+ "Could not determine if resultset is empty due to exception calling isBeforeFirst or isAfterLast()"
+ );
+ }
+ }
+
}
Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java 2010-04-12 18:20:20 UTC (rev 19216)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java 2010-04-12 18:21:12 UTC (rev 19217)
@@ -1,6 +1,8 @@
// $Id: ScrollableCollectionFetchingTest.java 10977 2006-12-12 23:28:04Z steve.ebersole(a)jboss.com $
package org.hibernate.test.hql;
+import java.util.List;
+
import junit.framework.Test;
import org.hibernate.HibernateException;
@@ -47,6 +49,195 @@
s.close();
}
+ public void testScrollingJoinFetchesEmptyResultSet() {
+ Session s = openSession();
+ Transaction txn = s.beginTransaction();
+
+ assertTrue(s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .list()
+ .isEmpty() );
+
+ ScrollableResults results = s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .scroll();
+
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.next() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.previous() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ results.beforeFirst();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ assertFalse( results.first() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ results.afterLast();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ assertFalse( results.last() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ for ( int i=1; i<3; i++ ) {
+ assertFalse( results.scroll( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.scroll( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.setRowNumber( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.setRowNumber( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ }
+
+ txn.commit();
+ s.close();
+ }
+
+ public void testScrollingJoinFetchesSingleRowResultSet() {
+ Session s = openSession();
+ Transaction txn = s.beginTransaction();
+
+ Animal mother = new Animal();
+ mother.setDescription( "root-1" );
+
+ Animal daughter = new Animal();
+ daughter.setDescription( "daughter" );
+
+ daughter.setMother( mother );
+ mother.addOffspring( daughter );
+
+ s.save( mother );
+ s.save( daughter );
+
+ txn.commit();
+ s.close();
+
+ s = openSession();
+ txn = s.beginTransaction();
+
+ assertNotNull(s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .uniqueResult() );
+
+ ScrollableResults results = s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .scroll();
+
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.previous() );
+
+ assertTrue( results.next() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.next() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertTrue( results.previous() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.previous() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertTrue( results.next() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ results.beforeFirst();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.previous() );
+
+ assertTrue( results.first() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+ assertFalse( results.next() );
+
+ results.afterLast();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ assertTrue( results.last() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+ assertFalse( results.next() );
+
+ assertTrue( results.first() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ for ( int i=1; i<3; i++ ) {
+ assertTrue( results.setRowNumber( 1 ) );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.scroll( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertTrue( results.setRowNumber( 1 ) );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.scroll( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ if ( i != 1 ) {
+ assertFalse( results.setRowNumber( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.setRowNumber( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ }
+ }
+
+ txn.commit();
+ s.close();
+
+ s = openSession();
+ txn = s.beginTransaction();
+
+ s.createQuery( "delete Animal where not description like 'root%'" ).executeUpdate();
+ s.createQuery( "delete Animal" ).executeUpdate();
+
+ txn.commit();
+ s.close();
+ }
+
public void testScrollingJoinFetchesForward() {
if ( ! supportsResultSetPositionQueryMethodsOnForwardOnlyCursor() ) {
return;
16 years
Hibernate SVN: r19216 - in core/branches/Branch_3_3: testsuite/src/test/java/org/hibernate/test/hql and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: gbadner
Date: 2010-04-12 14:20:20 -0400 (Mon, 12 Apr 2010)
New Revision: 19216
Modified:
core/branches/Branch_3_3/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java
core/branches/Branch_3_3/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java
Log:
HHH-1804 HHH-5096 : FetchingScrollableResultsImpl throws SQLException when empty; last() does not move cursor if it is after last
Modified: core/branches/Branch_3_3/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java
===================================================================
--- core/branches/Branch_3_3/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java 2010-04-12 13:42:57 UTC (rev 19215)
+++ core/branches/Branch_3_3/core/src/main/java/org/hibernate/impl/FetchingScrollableResultsImpl.java 2010-04-12 18:20:20 UTC (rev 19216)
@@ -75,6 +75,12 @@
return false;
}
+ if ( isResultSetEmpty() ) {
+ currentRow = null;
+ currentPosition = 0;
+ return false;
+ }
+
Object row = getLoader().loadSequentialRowsForward(
getResultSet(),
getSession(),
@@ -183,13 +189,16 @@
public boolean last() throws HibernateException {
boolean more = false;
if ( maxPosition != null ) {
+ if ( currentPosition > maxPosition.intValue() ) {
+ more = previous();
+ }
for ( int i = currentPosition; i < maxPosition.intValue(); i++ ) {
more = next();
}
}
else {
try {
- if ( getResultSet().isAfterLast() ) {
+ if ( isResultSetEmpty() || getResultSet().isAfterLast() ) {
// should not be able to reach last without maxPosition being set
// unless there are no results
return false;
@@ -313,4 +322,18 @@
}
return scroll( rowNumber - currentPosition );
}
+
+ private boolean isResultSetEmpty() {
+ try {
+ return currentPosition == 0 && ! getResultSet().isBeforeFirst() && ! getResultSet().isAfterLast();
+ }
+ catch( SQLException e ) {
+ throw JDBCExceptionHelper.convert(
+ getSession().getFactory().getSQLExceptionConverter(),
+ e,
+ "Could not determine if resultset is empty due to exception calling isBeforeFirst or isAfterLast()"
+ );
+ }
+ }
+
}
Modified: core/branches/Branch_3_3/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java
===================================================================
--- core/branches/Branch_3_3/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java 2010-04-12 13:42:57 UTC (rev 19215)
+++ core/branches/Branch_3_3/testsuite/src/test/java/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java 2010-04-12 18:20:20 UTC (rev 19216)
@@ -1,6 +1,8 @@
// $Id: ScrollableCollectionFetchingTest.java 10977 2006-12-12 23:28:04Z steve.ebersole(a)jboss.com $
package org.hibernate.test.hql;
+import java.util.List;
+
import junit.framework.Test;
import org.hibernate.HibernateException;
@@ -47,6 +49,195 @@
s.close();
}
+ public void testScrollingJoinFetchesEmptyResultSet() {
+ Session s = openSession();
+ Transaction txn = s.beginTransaction();
+
+ assertTrue(s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .list()
+ .isEmpty() );
+
+ ScrollableResults results = s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .scroll();
+
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.next() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.previous() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ results.beforeFirst();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ assertFalse( results.first() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ results.afterLast();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ assertFalse( results.last() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ for ( int i=1; i<3; i++ ) {
+ assertFalse( results.scroll( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.scroll( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.setRowNumber( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.setRowNumber( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ }
+
+ txn.commit();
+ s.close();
+ }
+
+ public void testScrollingJoinFetchesSingleRowResultSet() {
+ Session s = openSession();
+ Transaction txn = s.beginTransaction();
+
+ Animal mother = new Animal();
+ mother.setDescription( "root-1" );
+
+ Animal daughter = new Animal();
+ daughter.setDescription( "daughter" );
+
+ daughter.setMother( mother );
+ mother.addOffspring( daughter );
+
+ s.save( mother );
+ s.save( daughter );
+
+ txn.commit();
+ s.close();
+
+ s = openSession();
+ txn = s.beginTransaction();
+
+ assertNotNull(s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .uniqueResult() );
+
+ ScrollableResults results = s
+ .createQuery( "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
+ .setString( "desc", "root%" )
+ .scroll();
+
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.previous() );
+
+ assertTrue( results.next() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.next() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertTrue( results.previous() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.previous() );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertTrue( results.next() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ results.beforeFirst();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.previous() );
+
+ assertTrue( results.first() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+ assertFalse( results.next() );
+
+ results.afterLast();
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ assertFalse( results.next() );
+
+ assertTrue( results.last() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+ assertFalse( results.next() );
+
+ assertTrue( results.first() );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ for ( int i=1; i<3; i++ ) {
+ assertTrue( results.setRowNumber( 1 ) );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.scroll( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertTrue( results.setRowNumber( 1 ) );
+ assertTrue( results.isFirst() );
+ assertTrue( results.isLast() );
+
+ assertFalse( results.scroll( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ if ( i != 1 ) {
+ assertFalse( results.setRowNumber( i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+
+ assertFalse( results.setRowNumber( - i ) );
+ assertFalse( results.isFirst() );
+ assertFalse( results.isLast() );
+ }
+ }
+
+ txn.commit();
+ s.close();
+
+ s = openSession();
+ txn = s.beginTransaction();
+
+ s.createQuery( "delete Animal where not description like 'root%'" ).executeUpdate();
+ s.createQuery( "delete Animal" ).executeUpdate();
+
+ txn.commit();
+ s.close();
+ }
+
public void testScrollingJoinFetchesForward() {
if ( ! supportsResultSetPositionQueryMethodsOnForwardOnlyCursor() ) {
return;
16 years
Hibernate SVN: r19215 - in search/trunk: hibernate-search and 2 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-04-12 09:42:57 -0400 (Mon, 12 Apr 2010)
New Revision: 19215
Modified:
search/trunk/hibernate-search-archetype/pom.xml
search/trunk/hibernate-search-testing/pom.xml
search/trunk/hibernate-search/pom.xml
search/trunk/pom.xml
Log:
[maven-release-plugin] prepare for next development iteration
Modified: search/trunk/hibernate-search/pom.xml
===================================================================
--- search/trunk/hibernate-search/pom.xml 2010-04-12 13:42:43 UTC (rev 19214)
+++ search/trunk/hibernate-search/pom.xml 2010-04-12 13:42:57 UTC (rev 19215)
@@ -29,7 +29,7 @@
<parent>
<artifactId>hibernate-search-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>3.2.0.CR1</version>
+ <version>3.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: search/trunk/hibernate-search-archetype/pom.xml
===================================================================
--- search/trunk/hibernate-search-archetype/pom.xml 2010-04-12 13:42:43 UTC (rev 19214)
+++ search/trunk/hibernate-search-archetype/pom.xml 2010-04-12 13:42:57 UTC (rev 19215)
@@ -10,7 +10,7 @@
<parent>
<artifactId>hibernate-search-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>3.2.0.CR1</version>
+ <version>3.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: search/trunk/hibernate-search-testing/pom.xml
===================================================================
--- search/trunk/hibernate-search-testing/pom.xml 2010-04-12 13:42:43 UTC (rev 19214)
+++ search/trunk/hibernate-search-testing/pom.xml 2010-04-12 13:42:57 UTC (rev 19215)
@@ -29,7 +29,7 @@
<parent>
<artifactId>hibernate-search-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>3.2.0.CR1</version>
+ <version>3.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: search/trunk/pom.xml
===================================================================
--- search/trunk/pom.xml 2010-04-12 13:42:43 UTC (rev 19214)
+++ search/trunk/pom.xml 2010-04-12 13:42:57 UTC (rev 19215)
@@ -28,7 +28,7 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-parent</artifactId>
- <version>3.2.0.CR1</version>
+ <version>3.2.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Hibernate Search Parent</name>
@@ -47,9 +47,9 @@
</issueManagement>
<scm>
- <connection>scm:svn:http://anonsvn.jboss.org/repos/hibernate/search/tags/v3_2_0_CR1</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/search/tags/v3_2_0_CR1</developerConnection>
- <url>http://fisheye.jboss.com/browse/Hibernate/search/tags/v3_2_0_CR1</url>
+ <connection>scm:svn:http://anonsvn.jboss.org/repos/hibernate/search/trunk</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/search/trunk</developerConnection>
+ <url>http://fisheye.jboss.com/browse/Hibernate/search/trunk</url>
</scm>
<organization>
16 years
Hibernate SVN: r19214 - search/tags.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-04-12 09:42:43 -0400 (Mon, 12 Apr 2010)
New Revision: 19214
Added:
search/tags/v3_2_0_CR1/
Log:
[maven-scm] copy for tag v3_2_0_CR1
Copied: search/tags/v3_2_0_CR1 (from rev 19213, search/trunk)
16 years
Hibernate SVN: r19213 - in search/trunk: hibernate-search and 2 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-04-12 09:42:22 -0400 (Mon, 12 Apr 2010)
New Revision: 19213
Modified:
search/trunk/hibernate-search-archetype/pom.xml
search/trunk/hibernate-search-testing/pom.xml
search/trunk/hibernate-search/pom.xml
search/trunk/pom.xml
Log:
[maven-release-plugin] prepare release v3_2_0_CR1
Modified: search/trunk/hibernate-search/pom.xml
===================================================================
--- search/trunk/hibernate-search/pom.xml 2010-04-12 11:59:10 UTC (rev 19212)
+++ search/trunk/hibernate-search/pom.xml 2010-04-12 13:42:22 UTC (rev 19213)
@@ -23,15 +23,13 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hibernate-search-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>3.2.0-SNAPSHOT</version>
+ <version>3.2.0.CR1</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: search/trunk/hibernate-search-archetype/pom.xml
===================================================================
--- search/trunk/hibernate-search-archetype/pom.xml 2010-04-12 11:59:10 UTC (rev 19212)
+++ search/trunk/hibernate-search-archetype/pom.xml 2010-04-12 13:42:22 UTC (rev 19213)
@@ -1,6 +1,5 @@
<?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
@@ -11,7 +10,7 @@
<parent>
<artifactId>hibernate-search-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>3.2.0-SNAPSHOT</version>
+ <version>3.2.0.CR1</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: search/trunk/hibernate-search-testing/pom.xml
===================================================================
--- search/trunk/hibernate-search-testing/pom.xml 2010-04-12 11:59:10 UTC (rev 19212)
+++ search/trunk/hibernate-search-testing/pom.xml 2010-04-12 13:42:22 UTC (rev 19213)
@@ -23,14 +23,13 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hibernate-search-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>3.2.0-SNAPSHOT</version>
+ <version>3.2.0.CR1</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: search/trunk/pom.xml
===================================================================
--- search/trunk/pom.xml 2010-04-12 11:59:10 UTC (rev 19212)
+++ search/trunk/pom.xml 2010-04-12 13:42:22 UTC (rev 19213)
@@ -23,13 +23,12 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-parent</artifactId>
- <version>3.2.0-SNAPSHOT</version>
+ <version>3.2.0.CR1</version>
<packaging>pom</packaging>
<name>Hibernate Search Parent</name>
@@ -48,9 +47,9 @@
</issueManagement>
<scm>
- <connection>scm:svn:http://anonsvn.jboss.org/repos/hibernate/search/trunk</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/search/trunk</developerConnection>
- <url>http://fisheye.jboss.com/browse/Hibernate/search/trunk</url>
+ <connection>scm:svn:http://anonsvn.jboss.org/repos/hibernate/search/tags/v3_2_0_CR1</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/search/tags/v3_2_0_CR1</developerConnection>
+ <url>http://fisheye.jboss.com/browse/Hibernate/search/tags/v3_2_0_CR1</url>
</scm>
<organization>
@@ -451,8 +450,8 @@
<jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
<jdbc.url>jdbc:hsqldb:.</jdbc.url>
<jdbc.user>sa</jdbc.user>
- <jdbc.pass/>
- <jdbc.isolation/>
+ <jdbc.pass />
+ <jdbc.isolation />
</properties>
</profile>
<!--
@@ -479,7 +478,7 @@
<jdbc.url>jdbc:mysql://vmg08.mw.lab.eng.bos.redhat.com/searctru</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -499,7 +498,7 @@
<jdbc.url>jdbc:mysql://vmg02.mw.lab.eng.bos.redhat.com/searctru</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -520,7 +519,7 @@
</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -541,7 +540,7 @@
<jdbc.url>jdbc:postgresql://vmg01.mw.lab.eng.bos.redhat.com:5432:searctru</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -562,7 +561,7 @@
<jdbc.url>jdbc:postgresql://vmg03.mw.lab.eng.bos.redhat.com:5432:searctru</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -582,7 +581,7 @@
<jdbc.url>jdbc:postgresql://notinstalled.lab.eng.bos.redhat.com:5432:searctru</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -613,7 +612,7 @@
<jdbc.url>jdbc:db2://dev32.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -638,7 +637,7 @@
<jdbc.url>jdbc:db2://dev67.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -663,7 +662,7 @@
<jdbc.url>jdbc:db2://vmg06.mw.lab.eng.bos.redhat.com:50000/jbossqa</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -684,7 +683,7 @@
<jdbc.url>jdbc:oracle:thin:@dev20.qa.atl.jboss.com:1521:qa</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -705,7 +704,7 @@
<jdbc.url>jdbc:oracle:thin:@vmg05.mw.lab.eng.bos.redhat.com:1521:qaora10</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -725,7 +724,7 @@
<jdbc.url>jdbc:oracle:thin:@dev04.qa.atl2.redhat.com:1521:qaora11</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -747,7 +746,7 @@
</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
@@ -767,7 +766,7 @@
<jdbc.url>jdbc:sybase:Tds:vmg07.mw.lab.eng.bos.redhat.com:5000/searctru</jdbc.url>
<jdbc.user>searctru</jdbc.user>
<jdbc.pass>searctru</jdbc.pass>
- <jdbc.isolation/>
+ <jdbc.isolation />
</properties>
</profile>
16 years
Hibernate SVN: r19212 - search/trunk.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-04-12 07:59:10 -0400 (Mon, 12 Apr 2010)
New Revision: 19212
Modified:
search/trunk/changelog.txt
search/trunk/readme.txt
Log:
Release
Modified: search/trunk/changelog.txt
===================================================================
--- search/trunk/changelog.txt 2010-04-11 12:04:56 UTC (rev 19211)
+++ search/trunk/changelog.txt 2010-04-12 11:59:10 UTC (rev 19212)
@@ -1,6 +1,91 @@
Hibernate Search Changelog
==========================
+3.2.0.CR1 (12-04-2010)
+----------------------
+
+** Sub-task
+ * [HSEARCH-411] - Get a feature complete programmatic mapping (Amin Mohammed-Coleman)
+ * [HSEARCH-459] - Update quickstart archetype
+ * [HSEARCH-480] - Some add/delete operations have null primary keys
+ * [HSEARCH-481] - In a given sealed queue, only apply the same add/delete operation once
+ * [HSEARCH-493] - Continuous integration builds fail some tests on Oracle databases
+ * [HSEARCH-496] - Some hudson configurations need more time to run the testsuite
+ * [HSEARCH-497] - sybase15 Hudson configuration fails because of java.net.ConnectException: Connection refused
+ * [HSEARCH-498] - Postgres Hudson configurations fail by SQLGrammarException
+
+** Bug
+ * [HSEARCH-305] - Hibernate search doesn't work with criteria when it is not initialized laziily
+ * [HSEARCH-321] - FSSlaveDirectoryProvider incorrectly creates a subdirectory named 0
+ * [HSEARCH-346] - Setup hudson job testing Search against several databases
+ * [HSEARCH-382] - Indexing fails silently in case the file based index is mounted read only
+ * [HSEARCH-385] - Lazy ManyToOne association with @containedIn annotation cause HSearch create entity index with documentId = 0
+ * [HSEARCH-386] - In a Transaction, Delete on unindexed entities referenced by indexed entities with ContainedIn throw LazyInitializationException
+ * [HSEARCH-393] - unit test of the NotSharedReaderPerfTest hangs on with some database
+ * [HSEARCH-399] - NPE in org.hibernate.search.backend.WorkQueue.clear()
+ * [HSEARCH-422] - Properly implement delegation for FullTextEntityManager, FullTextSession and FullTextQuery methods of the new Hibernate version
+ * [HSEARCH-440] - FSSlaveDirectoryProvider creates a wrong index directory in case the current marker file does not exist
+ * [HSEARCH-443] - Using a Field extending AbstractField causes a ClassCastException in DocumentBuilderIndexedEntity when using @AnalyzerDiscriminator
+ * [HSEARCH-448] - Update JPATestCase after renaming of HibernatePersistence to AvailableSettings in Core
+ * [HSEARCH-450] - Example 1.9. superfluous hibernate word
+ * [HSEARCH-452] - FSMasterDirectoryProvider: typo in marker file name (Stephan Bublava)
+ * [HSEARCH-456] - CalendarBridge ignoring setParameterValues
+ * [HSEARCH-473] - Fields for _hibernate_class and the document ID are hard-coded to be analyzed and have "norms" enabled (Dobes Vandermeer)
+ * [HSEARCH-474] - Ensure IndexWriter is closed on errors in backend
+ * [HSEARCH-476] - Work queue contains the same operation multiple times and some add/delete operations have null primary keys
+ * [HSEARCH-478] - Entities with composite PK lead to query exceptions on MySQL
+ * [HSEARCH-479] - Return empty result list - Composed primary key - lucene search ok - primary key bridge ok
+ * [HSEARCH-484] - Building documentation fails
+ * [HSEARCH-488] - Nested use of @ContainedIn: changes not propagated to Lucene index
+ * [HSEARCH-490] - MassIndexer needs to use distinct on primary key selection
+ * [HSEARCH-492] - FSMasterDirectoryProvider and FSSlaveDirectoryProvider don't shutdown the Executor
+ * [HSEARCH-495] - IdentifierProducer: ClassCastException
+ * [HSEARCH-500] - Some tests don't close the SessionFactory and SearchFactory
+ * [HSEARCH-505] - JGroupsMasterTest uses native SQL failing on DB2 and sybase
+
+
+** Improvement
+ * [HSEARCH-437] - When using Thread bound sessions, Hibernate Search FTSession creation fails if out of transaction
+ * [HSEARCH-441] - Custom LockFactory loading should use PluginLoader
+ * [HSEARCH-447] - The build should use the maven-injection-plugin in order to dynamically inject the version string into org.hibernate.search.Version
+ * [HSEARCH-464] - Upgrade Lucene to 2.9.2
+ * [HSEARCH-475] - Improve error message on wrong type as filter parameter
+ * [HSEARCH-477] - Support for the new Solr's character filters (Gustavo Fernandes)
+ * [HSEARCH-489] - Remove the code avoiding the use of in restrictions when a composite id is used: Core does it automatically
+ * [HSEARCH-491] - Make some optional dependencies mandatory
+ * [HSEARCH-501] - Make use of BeforeTransactionCompletionProcess and AfterTransactionCompletionProcess instead of Synchronization
+ * [HSEARCH-502] - update MassIndexer to use new core features
+
+** New Feature
+ * [HSEARCH-352] - Introduce a programmatic mapping API
+ * [HSEARCH-372] - Support projection for ClassBridges that pass and use the field name passed in @ClassBridge.name
+ * [HSEARCH-379] - Properly implement new JPA 2 methods (Query and EntityManager)
+ * [HSEARCH-415] - Consider moving to Lucene 2.9
+ * [HSEARCH-421] - Provide a callback on indexing exception (Amin Mohammed-Coleman)
+ * [HSEARCH-429] - Add a configuration property to declaratively use a factory for the programmatic mapping API (Amin Mohammed-Coleman)
+
+
+** Task
+ * [HSEARCH-322] - Review MultiClassesQueryLoader
+ * [HSEARCH-408] - Improve execution speed of functional tests
+ * [HSEARCH-425] - Reimplement support for compressed fields (support removed in Lucene3)
+ * [HSEARCH-427] - Make the hibernate-search-artifact directory a proper maven module
+ * [HSEARCH-428] - Update the Getting Started section of the documentation
+ * [HSEARCH-432] - Add logging to trace the WorkQueue before being processed
+ * [HSEARCH-439] - Merge fixes from JBAPP (v3_1_1_GA_CP) branch to trunk
+ * [HSEARCH-442] - Upgrade existing code to Lucene 2.9.1
+ * [HSEARCH-454] - Upgrade Solr dependencies (Gustavo Fernandes)
+ * [HSEARCH-455] - Keep Search compatible with latest Hibernate Core
+ * [HSEARCH-458] - Remove all deprecations from Lucene's 2.9 API usage
+ * [HSEARCH-463] - Change the master docbook document to use the version number provided by the docbook plugin
+ * [HSEARCH-465] - Move to commons-annotations 3.2.0.Final
+ * [HSEARCH-468] - Refactor build to have a module setup
+ * [HSEARCH-482] - Update dependencies to Hibernate Core 3.5.0-Final
+ * [HSEARCH-483] - update readme.txt
+ * [HSEARCH-494] - Fix hudson failures
+ * [HSEARCH-504] - Fix ContainedIn tests which break on Oracle as they use a reserved keyword as column name
+
+
3.2.0.Beta1 (30-11-2009)
------------------------
Modified: search/trunk/readme.txt
===================================================================
--- search/trunk/readme.txt 2010-04-11 12:04:56 UTC (rev 19211)
+++ search/trunk/readme.txt 2010-04-12 11:59:10 UTC (rev 19212)
@@ -1,6 +1,6 @@
Hibernate Search
==================================================
-Version: 3.2.0.Beta1, 30.11.2009
+Version: 3.2.0.CR1, 12.04.2010
Description
-----------
16 years
Hibernate SVN: r19211 - search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/master.
by hibernate-commits@lists.jboss.org
Author: sannegrinovero
Date: 2010-04-11 08:04:56 -0400 (Sun, 11 Apr 2010)
New Revision: 19211
Modified:
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/master/JGroupsMasterTest.java
Log:
HSEARCH-505 JGroupsMasterTest uses native SQL failing on DB2 and sybase
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/master/JGroupsMasterTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/master/JGroupsMasterTest.java 2010-04-11 11:39:28 UTC (rev 19210)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/master/JGroupsMasterTest.java 2010-04-11 12:04:56 UTC (rev 19211)
@@ -25,8 +25,6 @@
package org.hibernate.search.test.jgroups.master;
import java.io.Serializable;
-import java.sql.SQLException;
-import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
@@ -128,23 +126,23 @@
}
/**
- * Create a test object without trigggering indexing. Use SQL directly.
+ * Create a test object and delete if from index.
*
* @return a <code>TShirt</code> test object.
- *
- * @throws java.sql.SQLException in case the inset fails.
*/
- @SuppressWarnings({ "deprecation" })
- private TShirt createObjectWithSQL() throws SQLException {
+ private TShirt createObjectWithSQL() {
Session s = openSession();
s.getTransaction().begin();
- Statement statement = s.connection().createStatement();
- statement.executeUpdate(
- "insert into TShirt_Master(id, logo, size_) values( '1', 'JBoss balls', 'large')"
- );
- statement.close();
- TShirt ts = ( TShirt ) s.get( TShirt.class, 1 );
+ TShirt ts = new TShirt();
+ ts.setId( 1 );
+ ts.setLogo( "JBoss balls" );
+ ts.setSize( "large" );
+ s.persist( ts );
s.getTransaction().commit();
+ FullTextSession fullTextSession = Search.getFullTextSession( s );
+ fullTextSession.beginTransaction();
+ fullTextSession.purge( TShirt.class, 1 );
+ fullTextSession.getTransaction().commit();
s.close();
return ts;
}
16 years
Hibernate SVN: r19210 - search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn.
by hibernate-commits@lists.jboss.org
Author: sannegrinovero
Date: 2010-04-11 07:39:28 -0400 (Sun, 11 Apr 2010)
New Revision: 19210
Modified:
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForDoc0.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForUnindexed.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForDoc0.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForUnindexed.java
Log:
HSEARCH-504 Fix ContainedIn tests which break on Oracle as they use a reserved keyword as column name
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForDoc0.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForDoc0.java 2010-04-11 11:17:29 UTC (rev 19209)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForDoc0.java 2010-04-11 11:39:28 UTC (rev 19210)
@@ -1,6 +1,8 @@
package org.hibernate.search.test.embedded.nested.containedIn;
import java.io.Serializable;
+
+import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -32,6 +34,7 @@
@org.hibernate.search.annotations.IndexedEmbedded
private java.util.List<Entity2ForDoc0> entities2 = new java.util.ArrayList<Entity2ForDoc0>();
+ @Column(name="universalid")//"uid" is a keywork in Oracle
public long getUid() {
return uid;
}
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForUnindexed.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForUnindexed.java 2010-04-11 11:17:29 UTC (rev 19209)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity1ForUnindexed.java 2010-04-11 11:39:28 UTC (rev 19210)
@@ -1,10 +1,10 @@
package org.hibernate.search.test.embedded.nested.containedIn;
import java.io.Serializable;
+
+import javax.persistence.Column;
import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.SequenceGenerator;
import javax.persistence.Version;
import org.hibernate.search.annotations.Field;
@@ -36,11 +36,7 @@
@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private java.util.List<Entity2ForUnindexed> entities2 = new java.util.ArrayList<Entity2ForUnindexed>();
- /**
- * Getter de l'attribut uid
- *
- * @return long : Renvoie uid.
- */
+ @Column(name="universalid")
public long getUid() {
return uid;
}
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForDoc0.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForDoc0.java 2010-04-11 11:17:29 UTC (rev 19209)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForDoc0.java 2010-04-11 11:39:28 UTC (rev 19210)
@@ -1,20 +1,17 @@
package org.hibernate.search.test.embedded.nested.containedIn;
import javax.persistence.Basic;
+import javax.persistence.Column;
import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.SequenceGenerator;
import javax.persistence.Version;
/**
* @author grolland
- *
*/
@javax.persistence.Entity
@org.hibernate.annotations.Proxy(lazy = true)
@javax.persistence.Table(name = "entity2")
-// @SequenceGenerator( name="ids_generator2", sequenceName = "ids_generator2")
public class Entity2ForDoc0 {
private static final long serialVersionUID = -3191273589083411349L;
@@ -41,6 +38,7 @@
this.name = name;
}
+ @Column(name="universalid")//"uid" is a keywork in Oracle
public long getUid() {
return uid;
}
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForUnindexed.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForUnindexed.java 2010-04-11 11:17:29 UTC (rev 19209)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/embedded/nested/containedIn/Entity2ForUnindexed.java 2010-04-11 11:39:28 UTC (rev 19210)
@@ -1,9 +1,8 @@
package org.hibernate.search.test.embedded.nested.containedIn;
+import javax.persistence.Column;
import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.SequenceGenerator;
import javax.persistence.Version;
/**
@@ -45,6 +44,7 @@
*
* @return long : Renvoie uid.
*/
+ @Column(name="universalid")//"uid" is a keywork in Oracle
public long getUid() {
return uid;
}
16 years