簡體   English   中英

Hibernate無法為剛剛創建的表的類找到映射

[英]Hibernate cannot find mappings for classes for tables it just created

我有hibernate為我創建我的數據庫架構。 它能夠很好地創建表,但命名查詢不能編譯,因為它聲稱對象沒有映射。

整個應用程序是注釋和配置驅動:沒有.xml文件。

以下是相關的配置部分:

properties = new Properties();
properties.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver");
properties.setProperty("hibernate.connection.url", con);
properties.setProperty("hibernate.connection.username", user);
properties.setProperty("hibernate.connection.password", pass);
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
properties.setProperty("hibernate.current_session_context_class","thread");
properties.setProperty("hibernate.hbm2ddl.auto","create");

Configuration config = new Configuration();
config.setProperties(properties);
config.addAnnotatedClass(Player.class);
SessionFactory factory = config.buildSessionFactory();

我的播放器類現在非常准確 - 它有一些參數,如名稱和ID。 它愉快地將這些翻譯成一張合適的桌子。

@Entity
@NamedQueries({
    @NamedQuery(name="verifyPlayerByUuid", query="SELECT name FROM player WHERE uuid = :uuid"),
    @NamedQuery(name="verifyPlayerByName", query="SELECT name FROM player WHERE name = :name"),
    @NamedQuery(name="obtainPlayerByUuid", query="FROM player WHERE uuid = :uuid"),
})
public class Player {
    // impl here
}

當我運行它時,我明白了。 請注意,我修剪了樣板時間戳和休眠包名稱,以便為相關消息騰出更多空間。 我還對格式化消息以更好地組織數據采取了自由 - 這只涉及添加空格。

[timestamp] [hib].hbm2ddl.SchemaExport   - HHH000227: Running hbm2ddl schema export
[timestamp] [hib].hbm2ddl.SchemaExport   - HHH000230: Schema export complete

[timestamp] [hib].SessionFactoryImpl     - HHH000177: Error in named query: verifyPlayerByUuid
org.hibernate.hql.internal.ast.QuerySyntaxException: 
    player is not mapped [SELECT name FROM player WHERE uuid = :uuid]

[timestamp] [hib].SessionFactoryImpl     - HHH000177: Error in named query: obtainPlayerByUuid
org.hibernate.hql.internal.ast.QuerySyntaxException: 
    player is not mapped [FROM player WHERE uuid = :uuid]

[timestamp] [hib].SessionFactoryImpl     - HHH000177: Error in named query: verifyPlayerByName
org.hibernate.hql.internal.ast.QuerySyntaxException: 
    player is not mapped [SELECT name FROM player WHERE name = :name]

您需要使用作為映射實體的類的名稱

config.addAnnotatedClass(Player.class);
...
FROM Player WHERE uuid = :uuid

同樣, uuid需要成為該類的一個領域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM