带有 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 如何在特定情况下工作,我会非常感兴趣!
我用 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 如何在特定情况下工作,我会非常感兴趣!