HHH-6627 HHH-7752 - Test cases
This commit is contained in:
parent
5bf8d84379
commit
de4517b0d5
|
@ -0,0 +1,54 @@
|
|||
package org.hibernate.test.dialect.functional;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
/**
|
||||
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||
*/
|
||||
@Entity
|
||||
public class Category implements Serializable {
|
||||
@Id
|
||||
public Integer id;
|
||||
|
||||
public String name;
|
||||
|
||||
@OneToMany(mappedBy = "category")
|
||||
public List<Product2> products;
|
||||
|
||||
public Category() {
|
||||
}
|
||||
|
||||
public Category(Integer id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if ( this == o ) return true;
|
||||
if ( ! ( o instanceof Category ) ) return false;
|
||||
|
||||
Category category = (Category) o;
|
||||
|
||||
if ( id != null ? !id.equals( category.id ) : category.id != null ) return false;
|
||||
if ( name != null ? !name.equals( category.name ) : category.name != null ) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = id != null ? id.hashCode() : 0;
|
||||
result = 31 * result + ( name != null ? name.hashCode() : 0 );
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Category(id = " + id + ", name = " + name + ")";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
package org.hibernate.test.dialect.functional;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "contacts")
|
||||
public class Contact implements Serializable {
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
public Long id;
|
||||
|
||||
@Column(name = "type")
|
||||
public String type;
|
||||
|
||||
@Column(name = "firstname")
|
||||
public String firstName;
|
||||
|
||||
@Column(name = "lastname")
|
||||
public String lastName;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "folder_id")
|
||||
public Folder folder;
|
||||
|
||||
public Contact() {
|
||||
}
|
||||
|
||||
public Contact(Long id, String firstName, String lastName, String type, Folder folder) {
|
||||
this.firstName = firstName;
|
||||
this.folder = folder;
|
||||
this.id = id;
|
||||
this.lastName = lastName;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if ( this == o ) return true;
|
||||
if ( ! ( o instanceof Contact ) ) return false;
|
||||
|
||||
Contact contact = (Contact) o;
|
||||
|
||||
if ( id != null ? !id.equals( contact.id ) : contact.id != null ) return false;
|
||||
if ( firstName != null ? !firstName.equals( contact.firstName ) : contact.firstName != null ) return false;
|
||||
if ( lastName != null ? !lastName.equals( contact.lastName ) : contact.lastName != null ) return false;
|
||||
if ( type != null ? !type.equals( contact.type ) : contact.type != null ) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = id != null ? id.hashCode() : 0;
|
||||
result = 31 * result + ( type != null ? type.hashCode() : 0 );
|
||||
result = 31 * result + ( firstName != null ? firstName.hashCode() : 0 );
|
||||
result = 31 * result + ( lastName != null ? lastName.hashCode() : 0 );
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Contact(id = " + id + ", type = " + type + ", firstName = " + firstName + ", lastName = " + lastName + ")";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package org.hibernate.test.dialect.functional;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.Formula;
|
||||
|
||||
/**
|
||||
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "folders")
|
||||
public class Folder implements Serializable {
|
||||
@Id
|
||||
public Long id;
|
||||
|
||||
public String name;
|
||||
|
||||
@Formula("( SELECT CASE WHEN c.type = 'owner' THEN c.firstname + ' ' + c.lastname END FROM contacts c where c.folder_id = id )")
|
||||
public String owner;
|
||||
|
||||
public Folder() {
|
||||
}
|
||||
|
||||
public Folder(Long id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if ( this == o ) return true;
|
||||
if ( ! ( o instanceof Folder ) ) return false;
|
||||
|
||||
Folder folder = (Folder) o;
|
||||
|
||||
if ( id != null ? !id.equals( folder.id ) : folder.id != null ) return false;
|
||||
if ( name != null ? !name.equals( folder.name ) : folder.name != null ) return false;
|
||||
if ( owner != null ? !owner.equals( folder.owner ) : folder.owner != null ) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = id != null ? id.hashCode() : 0;
|
||||
result = 31 * result + ( name != null ? name.hashCode() : 0 );
|
||||
result = 31 * result + ( owner != null ? owner.hashCode() : 0 );
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Folder(id = " + id + ", name = " + name + ", owner = " + owner + ")";
|
||||
}
|
||||
}
|
|
@ -32,6 +32,7 @@ import java.io.Serializable;
|
|||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
|
@ -45,6 +46,9 @@ public class Product2 implements Serializable {
|
|||
@Column(name = "description", nullable = false)
|
||||
public String description;
|
||||
|
||||
@ManyToOne
|
||||
public Category category;
|
||||
|
||||
public Product2() {
|
||||
}
|
||||
|
||||
|
@ -53,6 +57,12 @@ public class Product2 implements Serializable {
|
|||
this.description = description;
|
||||
}
|
||||
|
||||
public Product2(Integer id, String description, Category category) {
|
||||
this.category = category;
|
||||
this.description = description;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if ( this == o ) return true;
|
||||
|
|
|
@ -41,6 +41,8 @@ import org.hibernate.LockMode;
|
|||
import org.hibernate.LockOptions;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Projections;
|
||||
import org.hibernate.dialect.SQLServer2005Dialect;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.exception.LockTimeoutException;
|
||||
|
@ -220,6 +222,80 @@ public class SQLServerDialectTest extends BaseCoreFunctionalTestCase {
|
|||
session.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-6627")
|
||||
public void testPaginationWithAggregation() {
|
||||
Session session = openSession();
|
||||
Transaction tx = session.beginTransaction();
|
||||
|
||||
// populating test data
|
||||
Category category1 = new Category( 1, "Category1" );
|
||||
Category category2 = new Category( 2, "Category2" );
|
||||
Category category3 = new Category( 3, "Category3" );
|
||||
session.persist( category1 );
|
||||
session.persist( category2 );
|
||||
session.persist( category3 );
|
||||
session.flush();
|
||||
session.persist( new Product2( 1, "Kit1", category1 ) );
|
||||
session.persist( new Product2( 2, "Kit2", category1 ) );
|
||||
session.persist( new Product2( 3, "Kit3", category1 ) );
|
||||
session.persist( new Product2( 4, "Kit4", category2 ) );
|
||||
session.persist( new Product2( 5, "Kit5", category2 ) );
|
||||
session.persist( new Product2( 6, "Kit6", category3 ) );
|
||||
session.flush();
|
||||
session.clear();
|
||||
|
||||
// count number of products in each category
|
||||
List<Object[]> result = session.createCriteria( Category.class, "c" ).createAlias( "products", "p" )
|
||||
.setProjection(
|
||||
Projections.projectionList()
|
||||
.add( Projections.groupProperty( "c.id" ) )
|
||||
.add( Projections.countDistinct( "p.id" ) )
|
||||
)
|
||||
.addOrder( Order.asc( "c.id" ) )
|
||||
.setFirstResult( 1 ).setMaxResults( 3 ).list();
|
||||
|
||||
assertEquals( 2, result.size() );
|
||||
assertArrayEquals( new Object[] { 2, 2L }, result.get( 0 ) ); // two products of second category
|
||||
assertArrayEquals( new Object[] { 3, 1L }, result.get( 1 ) ); // one products of third category
|
||||
|
||||
tx.rollback();
|
||||
session.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-7752")
|
||||
public void testPaginationWithFormulaSubquery() {
|
||||
Session session = openSession();
|
||||
Transaction tx = session.beginTransaction();
|
||||
|
||||
// populating test data
|
||||
Folder folder1 = new Folder( 1L, "Folder1" );
|
||||
Folder folder2 = new Folder( 2L, "Folder2" );
|
||||
Folder folder3 = new Folder( 3L, "Folder3" );
|
||||
session.persist( folder1 );
|
||||
session.persist( folder2 );
|
||||
session.persist( folder3 );
|
||||
session.flush();
|
||||
session.persist( new Contact( 1L, "Lukasz", "Antoniak", "owner", folder1 ) );
|
||||
session.persist( new Contact( 2L, "Kinga", "Mroz", "co-owner", folder2 ) );
|
||||
session.flush();
|
||||
session.clear();
|
||||
session.refresh( folder1 );
|
||||
session.refresh( folder2 );
|
||||
session.clear();
|
||||
|
||||
List<Long> folderCount = session.createQuery( "select count(distinct f) from Folder f" ).setMaxResults( 1 ).list();
|
||||
assertEquals( Arrays.asList( 3L ), folderCount );
|
||||
|
||||
List<Folder> distinctFolders = session.createQuery( "select distinct f from Folder f order by f.id desc" )
|
||||
.setFirstResult( 1 ).setMaxResults( 2 ).list();
|
||||
assertEquals( Arrays.asList( folder2, folder1 ), distinctFolders );
|
||||
|
||||
tx.rollback();
|
||||
session.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-3961")
|
||||
public void testLockNowaitSqlServer() throws Exception {
|
||||
|
@ -280,14 +356,12 @@ public class SQLServerDialectTest extends BaseCoreFunctionalTestCase {
|
|||
s.getTransaction().begin();
|
||||
s.delete( kit );
|
||||
s.getTransaction().commit();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected java.lang.Class<?>[] getAnnotatedClasses() {
|
||||
return new java.lang.Class[] {
|
||||
Product2.class
|
||||
Product2.class, Category.class, Folder.class, Contact.class
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue