HHH-18830 test demonstrating bug in @OrderColumn
and that it doesn't exist with @OrderBy Signed-off-by: Gavin King <gavin@hibernate.org>
This commit is contained in:
parent
5adca84c43
commit
38355ccfc8
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
* Copyright Red Hat Inc. and Hibernate Authors
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.collection.orderby;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.OneToMany;
|
||||||
|
import jakarta.persistence.OrderBy;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static jakarta.persistence.CascadeType.PERSIST;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
class Book {
|
||||||
|
@Id
|
||||||
|
@Size(min=10, max = 13)
|
||||||
|
String isbn;
|
||||||
|
|
||||||
|
@OneToMany(cascade = PERSIST,
|
||||||
|
mappedBy = "isbn")
|
||||||
|
@OrderBy("number")
|
||||||
|
List<Page> pages;
|
||||||
|
|
||||||
|
Book(String isbn) {
|
||||||
|
this.isbn = isbn;
|
||||||
|
pages = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
Book() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
class Page {
|
||||||
|
@Id String isbn;
|
||||||
|
@Id @Column(name = "page_number") int number;
|
||||||
|
String text;
|
||||||
|
|
||||||
|
Page(String isbn, int number, String text) {
|
||||||
|
this.isbn = isbn;
|
||||||
|
this.number = number;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
Page() {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
* Copyright Red Hat Inc. and Hibernate Authors
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.collection.orderby;
|
||||||
|
|
||||||
|
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
||||||
|
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.Jpa;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
@Jpa(annotatedClasses = {Page.class, Book.class},
|
||||||
|
useCollectingStatementInspector = true)
|
||||||
|
public class OrderByMappedByTest {
|
||||||
|
@Test void test(EntityManagerFactoryScope scope) {
|
||||||
|
scope.inTransaction( em -> {
|
||||||
|
Book book = new Book( "XXX" );
|
||||||
|
em.persist( book );
|
||||||
|
book.pages.add( new Page("XXX", 1, "Lorem ipsum") );
|
||||||
|
} );
|
||||||
|
scope.inTransaction( em -> {
|
||||||
|
Book book = em.find( Book.class, "XXX" );
|
||||||
|
book.pages.add( new Page("XXX", 2, "Lorem ipsum") );
|
||||||
|
} );
|
||||||
|
List<String> queries = ((SQLStatementInspector) scope.getStatementInspector()).getSqlQueries();
|
||||||
|
assertEquals( 4, queries.size() );
|
||||||
|
scope.inTransaction( em -> {
|
||||||
|
assertEquals( em.find( Book.class, "XXX" ).pages.size(), 2 );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
* Copyright Red Hat Inc. and Hibernate Authors
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.collection.ordercol;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.OneToMany;
|
||||||
|
import jakarta.persistence.OrderColumn;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import org.hibernate.annotations.ListIndexBase;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static jakarta.persistence.CascadeType.PERSIST;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
class Book {
|
||||||
|
@Id
|
||||||
|
@Size(min=10, max = 13)
|
||||||
|
String isbn;
|
||||||
|
|
||||||
|
@OneToMany(cascade = PERSIST,
|
||||||
|
mappedBy = "isbn")
|
||||||
|
@OrderColumn(name = "page_number")
|
||||||
|
@ListIndexBase(1)
|
||||||
|
List<Page> pages;
|
||||||
|
|
||||||
|
Book(String isbn) {
|
||||||
|
this.isbn = isbn;
|
||||||
|
pages = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
Book() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
class Page {
|
||||||
|
@Id String isbn;
|
||||||
|
@Id @Column(name = "page_number") int number;
|
||||||
|
String text;
|
||||||
|
|
||||||
|
Page(String isbn, int number, String text) {
|
||||||
|
this.isbn = isbn;
|
||||||
|
this.number = number;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
Page() {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
* Copyright Red Hat Inc. and Hibernate Authors
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.collection.ordercol;
|
||||||
|
|
||||||
|
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
||||||
|
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.Jpa;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
@Jpa(annotatedClasses = {Page.class, Book.class},
|
||||||
|
useCollectingStatementInspector = true)
|
||||||
|
public class OrderColumnMappedByTest {
|
||||||
|
@Test void test(EntityManagerFactoryScope scope) {
|
||||||
|
scope.inTransaction( em -> {
|
||||||
|
Book book = new Book( "XXX" );
|
||||||
|
em.persist( book );
|
||||||
|
book.pages.add( new Page("XXX", 1, "Lorem ipsum") );
|
||||||
|
} );
|
||||||
|
scope.inTransaction( em -> {
|
||||||
|
Book book = em.find( Book.class, "XXX" );
|
||||||
|
book.pages.add( new Page("XXX", 2, "Lorem ipsum") );
|
||||||
|
} );
|
||||||
|
List<String> queries = ((SQLStatementInspector) scope.getStatementInspector()).getSqlQueries();
|
||||||
|
assertEquals( 4, queries.size() );
|
||||||
|
scope.inTransaction( em -> {
|
||||||
|
assertEquals( em.find( Book.class, "XXX" ).pages.size(), 2 );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue