当前位置: 首页 > 知识库问答 >
问题:

Quarkus Panache实体不在存储库中

杜俊楚
2023-03-14

我的应用程序中有一个Book model类,它如下所示:

@Entity
public class Book extends PanacheEntity{
    public String title;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
@QuarkusTest
public class GreetingResourceTest {

    @Test
    @Transactional
    public void testBookEndpoint() {
        Book book= new Book();
        book.title="Quarkus is awesome";
        book.persistAndFlush();
        assertTrue(book.isPersistent());
        given()
          .when().get("/hello/"+book.id)
          .then()
             .statusCode(200)
             .body(is("Quarkus is awesome"));
    }
}
@Path("/hello")
public class GreetingResource {

    @GET
    @Path("/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getBook(@PathParam("id") Long id) {
        Book book=Book.findById(id);
        return book.title; //NullPointerException. Book cannot be found
    }
}

book.findbyid(id)返回NULL。为什么?

共有1个答案

卫烨烁
2023-03-14

这一问题是由于交易的可见性所引起的。虽然存在对Book.PersistandFlush()的调用,但包装public void testBookEndpoint()的事务尚未提交。因此,对于公共字符串getBook(@PathParam(“id”)Long id)中的事务来说,新的账本还不可见。

您需要确保在测试restendpoint之前提交了插入账本的事务,以确保新账本在数据库中对检索它的rest调用可见,例如。

@QuarkusTest
public class GreetingResourceTest {
    static Book book;

    @BeforeAll
    @Transactional
    public static void setupEntities(){
        book = new Book();
        book.title="Quarkus is awesome";
        book.persistAndFlush();
        assertTrue(book.isPersistent());
    }

    @Test
    public void testBookEndpoint() {
        given()
                .when().get("/hello/"+book.id)
                .then()
                .statusCode(200)
                .body(is("Quarkus is awesome"));
    }
}
 类似资料:
  • 我创建了一个基本的Spring MVC / JPA / Hibernate应用程序。我试图保存一个UserProfile实体来测试我是否真的可以持久化它,但是什么也没有保存,也没有抛出异常。 在控制器方法中,我创建了一个简单的UserProfile(这是一个@Entity),并将其发送到服务方法。类使用 @Service 对类进行批注,并使用 @Transactional 对 addUserPro

  • 我在使用JPA时遇到了一些困难。我没有得到任何异常,但我不能保存任何东西到数据库。我从Hibernate到Jpa,在那里一切都工作得很好。下面是我的文件 Application.Properties: 存储库: 服务: 我在提交表单时得到了200的响应,但在数据库中找不到数据

  • 我正试图让我的头绕过DDD,但我卡住了。这就是我如何设置我的项目: 然后,我继续实现UserRepository,这里我遇到了另一个问题:UserRepository接口需要域用户模型,当我试图在DAL中实现接口时,我需要使用域用户模型来实现它,这导致DAO是为域模型而不是DAL模型创建的,这没有任何意义。唯一能修正的就是在域层中引用DAL,这是错误的。 有人能解释一下我在DDD中遗漏了什么吗?

  • 我目前正在尝试使用spring数据存储库删除我的一些实体。delete调用工作时没有任何异常/错误消息,但之后不会删除实体。 这些是我的实体: 而且 存储库非常简单: delete调用类似于 有什么想法为什么这个变化没有反映在数据库中吗? 编辑1: 我找到了变通办法,但我还是不明白真正的问题是什么。如果我像这样删除帖子(有几个例外,因为违反了约束,但帖子仍然会被删除),它就“起作用”了: 编辑2:

  • 我希望像查询NodeEntity一样查询RelationshipEntity。 软件包信息: 此存储库不工作。 getEmployeeWorkingOnProject(String,String)返回NULL 我在关键字之后进行了修改,例如将其从修改为像这样的别名,并且还尝试更改了返回中别名的顺序。 我希望获得与特定员工和特定项目相关联的所有状态(边缘)。 或 或其他类型的类似结果,其中关系实体持

  • 在我的项目中,我使用类型A的对象,它与类型B的对象具有一个关系(orphanremove=true,cascade=cascadetype.all,fetch=fetchtype.eagery)。我需要SpringDataRest(SDR)使用单个POST请求存储完整的A对象及其B对象(子对象)。我尝试了SDR中的几种组合,对我来说唯一有效的组合是为对象A创建@repositoryrestreso