为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个包添加实体时出现“QuerySyntaxException:用户未映射”

从另一个包添加实体时出现“QuerySyntaxException:用户未映射”

饮歌长啸 2023-07-13 17:49:21
我制作了一个 Hibernate 配置 maven 项目(使用 maven-shade-plugin 构建),以允许我的代码库使用一个统一的“数据库类”。org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped但是,当从正在运行的项目外部调用时,该类似乎没有映射(在运行时引发异常)。当在项目中运行时,一切正常。但是,当从项目外部运行时,Hibernate 无法映射实体。CommonDB.java(maven 包 meta1203-data 的一部分)package com.meta1203.microservices;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class CommonDB <C extends BaseEntity> {    private Configuration cfg;    private SessionFactory sf;    private Session session;    private Class<C> c;    public CommonDB(Class<C> anoClass) {        String jdbcUrl = String.format(                "jdbc:mysql://%s/%s",                System.getenv("DB_URL"),                System.getenv("DB_NAME"));        cfg = new Configuration()                .setProperty("hibernate.connection.url", jdbcUrl)                .setProperty("hibernate.connection.username", System.getenv("DB_USERNAME"))                .setProperty("hibernate.connection.password", System.getenv("DB_PASSWORD"))                .setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver")                .setProperty("hibernate.connection.pool_size", "1")                .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect")                .setProperty("hibernate.hbm2ddl.auto", "update")                .setProperty("hibernate.show_sql", "true")                .addAnnotatedClass(anoClass.getClass());        c = anoClass;    }    public void open() {        sf = cfg.buildSessionFactory();        session = sf.openSession();    }    public void close() {        session.close();        sf.close();    }    public C findOneBy(String field, String o) {        String query = "select u from " + c.getSimpleName() + " u where u." + field + " = :id";        return session.createQuery(query, c).setParameter("id", o).getSingleResult();    } // other CRUD functions}
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

@Entity

@Table(name = "users")

public class User extends BaseEntity {

您的实体称为“用户”,但它映射到一个称为“用户”的表。


将实体更改为用户或将表更改为用户。


应该可以做到这一点。


查看完整回答
反对 回复 2023-07-13
?
翻阅古今

TA贡献1780条经验 获得超5个赞

尝试:

Configuration configuration = new Configuration().configure();
        for (Class cls : getEntityClassesFromPackage("com.example.hib.entities")) {
            configuration.addAnnotatedClass(cls);
        }


查看完整回答
反对 回复 2023-07-13
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

哎呀,我知道发生了什么事。我的银河大脑决定在 Class 对象上执行操作addAnnotatedClass(anoClass.getClass()),所以我试图将 java.lang.Class 声明为 Hibernate 实体...哦,好吧,我只是个白痴。将其更改为 justaddAnnotatedClass(anoClass)并且效果很好。



查看完整回答
反对 回复 2023-07-13
  • 3 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信