我制作了一個 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 {
您的實體稱為“用戶”,但它映射到一個稱為“用戶”的表。
將實體更改為用戶或將表更改為用戶。
應該可以做到這一點。

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
嘗試:
Configuration configuration = new Configuration().configure(); for (Class cls : getEntityClassesFromPackage("com.example.hib.entities")) { configuration.addAnnotatedClass(cls); }

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
哎呀,我知道發生了什么事。我的銀河大腦決定在 Class 對象上執行操作addAnnotatedClass(anoClass.getClass())
,所以我試圖將 java.lang.Class 聲明為 Hibernate 實體...哦,好吧,我只是個白癡。將其更改為 justaddAnnotatedClass(anoClass)
并且效果很好。
添加回答
舉報
0/150
提交
取消