HHH-18494 Add test for issue
This commit is contained in:
parent
45ca8f24b0
commit
30b0c55e1d
|
@ -0,0 +1,205 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
* Copyright Red Hat Inc. and Hibernate Authors
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.query.sql;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.hibernate.query.NativeQuery;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.Jira;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.junit.jupiter.api.AfterAll;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.OneToMany;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Marco Belladelli
|
||||||
|
*/
|
||||||
|
@DomainModel( annotatedClasses = {
|
||||||
|
NativeQueryJoinTableTest.Shelf.class, NativeQueryJoinTableTest.Book.class,
|
||||||
|
} )
|
||||||
|
@SessionFactory
|
||||||
|
@Jira( "https://hibernate.atlassian.net/browse/HHH-18494" )
|
||||||
|
public class NativeQueryJoinTableTest {
|
||||||
|
private static final String SHELF_ID = "shelf1";
|
||||||
|
private static final String FILE_ID = "file1";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTypedQuery(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction( session -> {
|
||||||
|
final NativeQuery<Book> query = session.createNativeQuery(
|
||||||
|
"select book.*, book_1_.shelfid from BOOK_T book, SHELF_BOOK book_1_ where book.fileid = book_1_.fileid",
|
||||||
|
Book.class
|
||||||
|
);
|
||||||
|
final Book retrievedBook = query.getSingleResult();
|
||||||
|
assertEquals( FILE_ID, retrievedBook.getFileId() );
|
||||||
|
assertEquals( "Birdwatchers Guide to Dodos", retrievedBook.getTitle() );
|
||||||
|
assertEquals( "nonfiction", retrievedBook.getShelf().getArea() );
|
||||||
|
assertEquals( 3, retrievedBook.getShelf().getShelfNumber() );
|
||||||
|
assertEquals( SHELF_ID, retrievedBook.getShelf().getShelfid() );
|
||||||
|
assertEquals( 5, retrievedBook.getShelf().getPosition() );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddEntity(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction( session -> {
|
||||||
|
final NativeQuery query = session.createNativeQuery(
|
||||||
|
"select {book.*}, book_1_.shelfid from BOOK_T book, SHELF_BOOK book_1_ where book.fileid = book_1_.fileid"
|
||||||
|
);
|
||||||
|
query.addEntity( "book", Book.class );
|
||||||
|
final Book retrievedBook = (Book) query.getSingleResult();
|
||||||
|
assertEquals( FILE_ID, retrievedBook.getFileId() );
|
||||||
|
assertEquals( "Birdwatchers Guide to Dodos", retrievedBook.getTitle() );
|
||||||
|
assertEquals( "nonfiction", retrievedBook.getShelf().getArea() );
|
||||||
|
assertEquals( 3, retrievedBook.getShelf().getShelfNumber() );
|
||||||
|
assertEquals( SHELF_ID, retrievedBook.getShelf().getShelfid() );
|
||||||
|
assertEquals( 5, retrievedBook.getShelf().getPosition() );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
public void setUp(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction( session -> {
|
||||||
|
final Shelf shelf = new Shelf();
|
||||||
|
shelf.setShelfid( SHELF_ID );
|
||||||
|
shelf.setArea( "nonfiction" );
|
||||||
|
shelf.setPosition( Integer.valueOf( 5 ) );
|
||||||
|
shelf.setShelfNumber( Integer.valueOf( 3 ) );
|
||||||
|
shelf.setBooks( new HashSet<>() );
|
||||||
|
session.persist( shelf );
|
||||||
|
final Book book = new Book( FILE_ID );
|
||||||
|
book.setTitle( "Birdwatchers Guide to Dodos" );
|
||||||
|
book.setShelf( shelf );
|
||||||
|
session.persist( book );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterAll
|
||||||
|
public void tearDown(SessionFactoryScope scope) {
|
||||||
|
scope.getSessionFactory().getSchemaManager().truncateMappedObjects();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity( name = "Shelf" )
|
||||||
|
@Table( name = "SHELF" )
|
||||||
|
public static class Shelf {
|
||||||
|
@Id
|
||||||
|
private String shelfid;
|
||||||
|
|
||||||
|
private String area;
|
||||||
|
|
||||||
|
private Integer shelfNumber;
|
||||||
|
|
||||||
|
private Integer position;
|
||||||
|
|
||||||
|
@OneToMany
|
||||||
|
@JoinTable( name = "SHELF_BOOK", joinColumns = @JoinColumn( name = "shelfid" ), inverseJoinColumns = @JoinColumn( name = "fileid" ) )
|
||||||
|
private Set<Book> books;
|
||||||
|
|
||||||
|
public Shelf() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getShelfid() {
|
||||||
|
return shelfid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShelfid(String shelfid) {
|
||||||
|
this.shelfid = shelfid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getArea() {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArea(String area) {
|
||||||
|
this.area = area;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getShelfNumber() {
|
||||||
|
return shelfNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShelfNumber(Integer shelfNumber) {
|
||||||
|
this.shelfNumber = shelfNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPosition() {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPosition(Integer position) {
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<Book> getBooks() {
|
||||||
|
return books;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBooks(Set<Book> books) {
|
||||||
|
this.books = books;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
@Entity( name = "Book" )
|
||||||
|
@Table( name = "BOOK_T" )
|
||||||
|
public static class Book {
|
||||||
|
@Id
|
||||||
|
private String fileid;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@ManyToOne( optional = false, fetch = FetchType.EAGER )
|
||||||
|
@JoinTable( name = "SHELF_BOOK" )
|
||||||
|
@JoinColumn( name = "shelfid" )
|
||||||
|
private Shelf shelf;
|
||||||
|
|
||||||
|
public Book() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Book(final String fileid) {
|
||||||
|
this.fileid = fileid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileId() {
|
||||||
|
return fileid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileId(final String fileid) {
|
||||||
|
this.fileid = fileid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(final String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Shelf getShelf() {
|
||||||
|
return shelf;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShelf(Shelf shelf) {
|
||||||
|
this.shelf = shelf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue