私はWebアプリケーションを開発してTomcat 7.0にデプロイしています。私のアプリはMySQLデータベースを使用しています。私はすでにアプリケーションとデータベースの間の接続を設定しており、Hibernate 5.2.5のサポートを追加したいと考えていました。 は、以下の設定でHibernateコンソール経由でデータベースと通信できます。私は非Webアプリケーションで使用すると動作します。問題はサーバーに展開するときだけです。私は警告を受けるTomcat + hibernate =クエリクラスの永続クラスが見つかりません
no persistent classes found for query class: from entities.UserH
それに起因するサーバーエラー。
私のエンティティクラス:
@Entity
@Table(name = "users", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class UserH {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true, length = 11)
private int id;
@Column(name = "login", nullable = false, length = 45)
private String login;
@Column(name = "name", nullable = false, length = 45)
private String name;
@Column(name = "surname", nullable = false, length = 45)
private String surname;
/* getters and setters*/
}
マイ休止-annotation.cfg.xml:私が述べたように
public List<UserH> getAllUsers() {
try (Session session = HibernateUtils.getSessionAnnotationFactory().getCurrentSession()) {
session.beginTransaction();
Query<UserH> usersQuery = session.createQuery("from entities.UserH", UserH.class);
List<UserH> usersList = usersQuery.getResultList();
session.getTransaction().commit();
return usersList;
}
}
- それは動作します:ユーザーを取得する必要があります
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection properties - Driver, URL, user, password -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/web-database</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.connection.password">password</property>
<!-- org.hibernate.HibernateException: No CurrentSessionContext configured! -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Mapping with model class containing annotations -->
<mapping class="entities.UserH"/>
</session-factory>
</hibernate-configuration>
方法通常のアプリではOKですが、Tomcatではできません。利用可能なすべての要素をWebアーティファクトに追加しましたが、それは役に立たなかった。私もpersistance.xml
でJPAサポートを追加しようとしましたが、まだ運がありません。
その他に何か問題がありますか?
編集:私のHibernateUtilsクラス:
public class HibernateUtils {
private static SessionFactory sessionAnnotationFactory;
private static SessionFactory buildSessionAnnotationFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure("hibernate-annotation.cfg.xml");
System.out.println("Hibernate Annotation Configuration loaded");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
System.out.println("Hibernate Annotation serviceRegistry created");
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionAnnotationFactory() {
if (sessionAnnotationFactory == null)
sessionAnnotationFactory = buildSessionAnnotationFactory();
return sessionAnnotationFactory;
}
}
あなたの 'HibernateUtils'クラスコードを含めてください。 – Naros
@Naros、私は自分の投稿を編集しました。 – Mohru