У меня есть спящий режим, создающий мою схему базы данных для меня. Он может прекрасно создавать таблицы, но именованные запросы не компилируются, потому что он утверждает, что объекты не сопоставлены.
Все приложение управляется аннотациями и настройками: .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();
Мой класс проигрывателя сейчас довольно простой — у него есть некоторые параметры, такие как имя и идентификатор. Он с радостью переводит их в правильную таблицу.
@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]