Skip to content

Commit

Permalink
[quarkusio#15834] Test on PostgresSQL HQL spanning multiple tables
Browse files Browse the repository at this point in the history
with Hibernate Reactive
  • Loading branch information
DavideD committed Mar 18, 2021
1 parent 49a846c commit 528c57f
Show file tree
Hide file tree
Showing 3 changed files with 158 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package io.quarkus.it.hibernate.reactive.postgresql;

import java.util.Objects;

import javax.inject.Inject;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

import org.hibernate.reactive.mutiny.Mutiny;

import io.smallrye.mutiny.Uni;

/**
* We want to check that the right {@link org.hibernate.hql.spi.id.MultiTableBulkIdStrategy}
* is set when using Hibernate Reactive.
*
* @see io.quarkus.hibernate.reactive.runtime.boot.FastBootReactiveEntityManagerFactoryBuilder
* @see org.hibernate.reactive.bulk.impl.ReactiveBulkIdStrategy
*/
@Path("/hr-joinedsubclass")
public class HibernateReactiveTestEndpointJoinedSubclass {

@Inject
Mutiny.Session session;

@GET
@Path("/deleteBook/{bookId}")
public Uni<Book> deleteBook(@PathParam("bookId") Integer bookId) {
return session.withTransaction(tx -> session
.createQuery("delete BookJS where id=:id")
.setParameter("id", bookId)
.executeUpdate())
.chain(() -> session.find(SpellBook.class, bookId));
}

@POST
@Path("/prepareDb")
public Uni<Void> prepareDb() {
final SpellBook spells = new SpellBook(6, "Necronomicon", true);

return session.persist(spells)
.chain(session::flush);
}

@Entity(name = "SpellBookJS")
@Table(name = "SpellBookJS")
@DiscriminatorValue("S")
public static class SpellBook extends Book {

private boolean forbidden;

public SpellBook(Integer id, String title, boolean forbidden) {
super(id, title);
this.forbidden = forbidden;
}

SpellBook() {
}

public boolean getForbidden() {
return forbidden;
}
}

@Entity(name = "BookJS")
@Table(name = "BookJS")
@Inheritance(strategy = InheritanceType.JOINED)
public static class Book {

@Id
private Integer id;
private String title;

public Book() {
}

public Book(Integer id, String title) {
this.id = id;
this.title = title;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Book book = (Book) o;
return Objects.equals(title, book.title);
}

@Override
public int hashCode() {
return Objects.hash(title);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.quarkus.it.hibernate.reactive.postgresql;

import io.quarkus.test.junit.NativeImageTest;

@NativeImageTest
public class HibernateReactiveJoinedSubclassInGraalIT extends HibernateReactiveJoinedSubclassTest {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.quarkus.it.hibernate.reactive.postgresql;

import static org.hamcrest.Matchers.emptyOrNullString;

import org.junit.jupiter.api.Test;

import io.quarkus.test.common.http.TestHTTPEndpoint;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.RestAssured;

@QuarkusTest
@TestHTTPEndpoint(HibernateReactiveTestEndpointJoinedSubclass.class)
public class HibernateReactiveJoinedSubclassTest {

@Test
public void deleteBookQuery() {
RestAssured.when()
.post("/prepareDb")
.then()
.statusCode(204);

RestAssured.when()
.get("/deleteBook/6")
.then()
.statusCode(204)
.body(emptyOrNullString());
}
}

0 comments on commit 528c57f

Please sign in to comment.