Hibernateでhibernate.propertiesが見つからない問題とデータベース方言の更新の問題
この2日間、この問題を解決してきただけでなく、多くの情報を参照して、それは本当に心が痛いです。今ようやくデバッグが完了し、過大なブログが投稿されるに違いない!
まず最初に、私はHibernate 5.2とMySQL 5.7を使用しています!
要点を言えよ!!!
---------- ---------- ---------- *
バージョンによって使用するメソッドが違う! オーナーは、異なるバージョンで異なるメソッドと名前を使用して、これらの上に死んでいる! プログラマーはHibernate、SQLのバージョンを確認してください! そうしないと、私のように、何度も死ぬが、抜け出せないことになる。
---------- ---------- ---------- -----
まず、not found問題について、いろいろなところを参考にし、以下の2点にまとめました。
1 コードに論理的な誤りや構文上の誤りがないのに、NOT FOUND プロンプトが表示される場合
. このヒントは無視してかまいません(すべてのコードが正しく、cfgファイルの関連付けが正しい場合)。これは、修正しなければならないエラーではなく、警告と考えることができます。
なぜなら、Hibernate 内部では、properties ファイルと cfg.xml ファイルの両方が設定に使用されますが、Hibernate ファイルがデフォルトで最初に見るのは xml 設定、xml ファイルがあればプロパティは見ない、properties ファイルは hibernate の古いバージョンで使用されるからです。そこで、xmlファイルを設定すると、プロンプトを無視できるようになります。今、動作しているときと同じように、やはりこのプロンプトが表示されます。
2 コードにエラーが発生した場合は、以下の対処法をご参照ください。
どこがエラーなのか分からないので、自分で設定ファイルなどを貼って照らし合わせています。
2.1 まず、ファイルの場所がうまく配置されている必要があります。
student.hbm.xmlファイルとstudent.javaファイルは、できれば1つのパッケージの下に配置するのが望ましいです。そして、hibernate.cfg.xml は src ファイルの下に配置する必要があります。なぜなら、トークバック・ファクトリーを作成するときに cfg ファイルへのパスを記述しないと、システムはデフォルトで src ファイルに移動して設定ファイルを見つけるからです。(自分でパスを書きたい人は問題ありませんが、私はパスを書きません......というより面倒でエラーになりやすいので)
というわけで、私のファイルは、写真のように配置されています。
jar パッケージと mysql ドライバをすべて hibernate/required file yo の下にインポートすることを忘れないようにします。
2.2 hibernate.cgf.xlmの設定
<?xml version="1.0" encoding="UTF-8"? >
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<! -- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/db</property>
<property name="connection.username">root</property>
<property name="connection.password">11111</property>
<! -- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<! -- SQL dialect Note that the new version of MYSQL5.7 dialect is org.hibernate.dialect.MySQL5InnoDBDialect Don't get it wrong! You can't get it wrong here -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<! -- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<! -- Echo all executed SQL to stdout -->
<property name="hibernate.format_sql">true</property>
<property name="show_sql">true</property>
<! -- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<mapping class="config.student"/>
<mapping resource="config/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
コンフィギュレーション・ファイルで見るべき場所は
<mapping resource="config/student.hbm.xml"/> and
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
この2つの文章は、今 MYSQL 5.7 の方言表現には注意が必要です . また、設定ファイルの関連付けについては、パッケージ下のファイル同士は スラッシュ をドットで囲むのではなく
2.3 student.hmb.xml
<?xml version="1.0"? >
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<! -- Generated 2018-8-23 13:22:25 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="config.student" table="student">
<id name="id" >
<column name='s_id'></column>
</id>
<property name="name" >
<column name="name"></column>
</property>
<property name="sex" >
<column name='sex'></column>
</property>
</class>
</hibernate-mapping>
ここで注目すべきは、このフレーズです。
"
http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
">
ネットで見かけるバージョンは基本的に
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
">
デバッグしていると、プロンプトが「2番目の式は破棄されました」と表示し、現在は1番目の式を使っています。
2.4 student.java
package config;
public class student {
private int id;
private String name;
private String sex;
public student(int a,String b,String c)
{
this.id=a;
this.name=b;
this.sex=c;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2.5 studenttest.java
package test;
import static org.junit.Assert.*;
import org.hibernate;
import org.hibernate;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg;
import org.hibernate.service.ServiceRegistry;
import org.junit;
Before;
import org.junit;
import config.student;
public class studenttest {
@Test
public void testSaveStudents() {
student student = new student(2,"Peppa Pig","female");
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
session.beginTransaction();
session.save(student);
session.getTransaction().commit();
session.close();
sf.close();
}
}
The most important thing here is to create the session factory.
The method of creation is completely different from version to version. hibernate 4\5 has a completely different method of creation. Some methods are deprecated. Here I can guarantee that this method will work for Hibernate 5.2, 5.3 should also work but I haven't tried it.
以下に公式の作成方法を掲載します(公式ユーザーガイドにある方法で作成したところ、トークバックファクトリーでうまくいかず、非常に悔しい思いをしました。ぜひ試してみて、うまくいったら教えてください)
例4. org.hibernate.SessionFactory の取得
protected void setUp() throws Exception {... // SessionFactoryはアプリケーションに対して一度だけセットアップされます! final StandardServiceRegistry registry = new StandardServiceRegistryBuilder() .configure() // hibernate.cfg.xml から設定を構成する。 .ビルド(); トライ { sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory(); キャッチ (例外 e) { // レジストリはSessionFactoryによって破壊されるはずだが、SessionFactoryの構築に問題があった。 // だから手動で破壊する。 StandardServiceRegistryBuilder.destroy( registry ); } }例6.エンティティ一覧の取得
session = sessionFactory.openSession(); session.beginTransaction(); List result = session.createQuery( "from Event" ).list(); for ( Event event : (List<Event>) result ) { System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() ); } session.getTransaction().commit(); session.close();
もし、私が言っていることがよくわからないなら、この立派な人が書いた文章を読んでみてください。
https://bbs.csdn.net/topics/391955731
関連
-
mysql reports Access denied; you need (at least one of) SUPER privilege(s) for this operation
-
(NTDLL.DLL): 0xC0000005: アクセス違反 - 解決
-
unixODBC:データソース名が見つからない、デフォルトドライバが指定されていないに関する質問
-
解決策: テーブルの定義が正しくありません。
-
IEntityChangeTracker の複数のインスタンスからエンティティオブジェクトを参照できない場合の対処法
-
SQL SERVER データベース SELECT INTO および INSERT INTO の使用法(テンポラリテーブルへのデータ挿入を含む)
-
は、GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
ORA-06550 "の解決策。1 行目、7 列目"
-
ORA-30926: ソース・テーブルの安定した行のセットを取得できませんか?
-
mysql: この操作には (少なくとも 1 つの) RELOAD 権限が必要です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
親行が削除または更新できない: 外部キー制約に失敗 解決策
-
2021MySql-8.0.26インストール詳細チュートリアル(ベビーシッターレベル)
-
MySQLデータベースのクエリ機能を使用する際に、グループ関数の使用が無効である問題の解決方法
-
01. プロシージャの結果セットを持つ一時テーブルへのSELECT INTO
-
Postgresql でテーブル "t" の FROM 句の項目が見つからない。
-
MongoDBコマンド
-
ORA-65096 無効な共通ユーザー名またはロール名
-
DB2 SQL エラーの解決法。sqlcode=-420, sqlstate=22018
-
MySqlエラー解析'where節'の未知の列'xxx'
-
AttributeError: 'function' オブジェクトには 'cursor' という属性がありません。