带有 Panache 的 Quarkus 获得休眠错误 HHH000183

Quarkus with Panache getting hibernate error HHH000183

我用 Quarkus 构建了一个应用程序,我正在使用 Hibernate 和 Panache 来制作模型。一切顺利,应用程序启动,但是当我调用 Web 服务以使用 Panache 功能 (.listAll()) 获取列表时,我得到一个空列表,并且在控制台中看到以下消息:

HHH000183: no persistent classes found for query class: from com.myproject.model.TeamEntity

我的模型使用 @Entity 注释定义,应该允许 Hibernate 自行查找实体映射。这是 Team 模型的示例:

@Entity
@Table(name = "TEAM")
public class TeamEntity extends PanacheEntityBase {

    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "TEAM_SEQ_GEN")
    @SequenceGenerator(name = "TEAM_SEQ_GEN", sequenceName = "TEAM_SEQ", allocationSize = 10)
    @Column(name = "ID_TEAM", nullable = false)
    private int id;

    @Column(name = "NAME", nullable = false)
    private String name;

    ...

}

我在项目中没有任何 persistence.xml 文件,只有 application.properties 与 Quarkus 链接。以下是从我的中提取的相关属性:

quarkus.datasource.db-kind=oracle
quarkus.datasource.jdbc.url=jdbc:oracle:thin:/@MYWALLET
%dev.quarkus.datasource.jdbc.url=jdbc:oracle:thin:MYUSER/MYPASSWORD@localhost:1521/SAA
quarkus.datasource.jdbc.driver=oracle.jdbc.OracleDriver
quarkus.datasource.jdbc.min-size=2
quarkus.datasource.jdbc.max-size=10
quarkus.datasource.jdbc.new-connection-sql=alter session set current_schema=MYSCHEMA
quarkus.hibernate-orm.dialect=org.hibernate.dialect.Oracle12cDialect

有人知道问题出在哪里吗? Hibernate 应该检测带有注释的实体并自动在查询中使用它们。

发现问题出在 application.properties 文件中的 Quarkus 数据源配置上。更具体地说,从这个特定的行来定义第一次连接时使用的模式(我不得不承认这不好看):

quarkus.datasource.jdbc.new-connection-sql=alter session set current_schema=MYSCHEMA

用以下内容替换上面的行解决了问题:

quarkus.hibernate-orm.database.default-schema=MYSCHEMA

总而言之,我认为如果这个 属性 没有定义,Hibernate 无法找到/不接受定义的实体,可能是因为它事先进行了某种检测。这只是一个假设,如果有人更准确地知道 Hibernate 如何在特定情况下工作,我会非常感兴趣!