問題タブ [hibernate-native-query]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - ネイティブ クエリを使用して SQL Server データベースに接続する動作中の Java EE サンプル アプリはどこにありますか?
ネイティブ クエリを使用して SQL Server データベースに接続する動作中の Java EE サンプル アプリはどこにありますか?
Eclipse、Microsoft SQL Server Management Studio (SSMS)、glassfish、
Eclipse の Java EE アプリケーションを SSMS のデータベースに接続する必要があります。
「SELECT * FROM Table」などのネイティブ クエリを使用して SQL Server を具体的に呼び出すアプリが必要です。
ありがとう
sql-server - ネイティブ クエリから作成された Hibernate クエリには、不正な構文が含まれています
次のように、ネイティブクエリでテーブルから選択しようとしていました:
が 0の場合firstIndex
(内容は関係ありませんpageSize
)、Hibernate は次のクエリを作成します。
これは問題ありfirstIndex
ませんが、 を 0 以外の値に変更すると、休止状態が次のクエリを作成します。
ただし、このクエリにSELECT * as page0_
は有効な SQL Server 構文ではないものが含まれています。
また、次のコードを使用すると、すべて問題ないことに注意してください。
誰が何が悪いのか教えてもらえますか? これはバグですか、それとも何か間違っていますか?
mysql - ネイティブ クエリ executeUpdate は、Spring トランザクションでデータをコミットするようです
私のユースケースは次のとおりです。アプリケーションユーザー(EntityManager.persist)を作成するときに、DBユーザーも作成して権限を付与する必要があります(そのため、休止状態のnativeQueryが必要です)。
両方の呼び出しで DAO を呼び出す Spring @Transactional メソッドがあります。
私のDAOメソッドは次のようになります。
これで、 executeUpdate()を含む最初の行が実行されるとすぐに、DB ユーザー (user1@localhost) とともにデータベースに永続化された companyReportsUser が表示されます。
すべての nativeQuery が実行され、すぐに 1 つずつコミットされます。それらはコミットされているため、ロールバックできません。私の構成のどこにも自動コミットパラメーターが設定されていないため、Hibernate docs にあるように「false」であると想定しています。
ネイティブ クエリを使用せずに @Transactional の動作をテストしましたが、想定どおりに動作します (RuntimeException をスローするとトランザクションがロールバックされ、データベースにデータが挿入されません)。
デバッグ時に、実行中のトランザクションで呼び出されたときに永続化操作が実行を遅らせることがわかりました。
ネイティブ クエリは、すぐに PreparedStatement を作成して実行するようです (少なくとも、どのような種類のキューも見つかりませんでした。
休止状態のネイティブ クエリと Spring トランザクションの間の相互作用が得られない可能性があると思いますが、トランザクションとネイティブ クエリに関する Spring と Hibernate のドキュメントを読むのに時間をかけましたが、役立つものは何も見つかりませんでした。
データベースユーザーを作成し、ネイティブクエリよりも優れた権限を付与する方法があるかもしれません (ただし、何も見つかりませんでした)。
以下は私のアプリケーション構成です:
applicationContext.xml
persistence.xml
使用したライブラリ:
- 休止状態 4.1.6.FINAL
- 春 3.2.2.RELEASE
- mysql-connector-java-5.1.21
- MySQL 5.5
oracle - コンテナー管理データソースを使用した Oracle ネイティブ クエリの実行
JPA を使用してコンテナー管理の Oracle データソースに接続するプロジェクトがあり<non-jta-datasource>
、persistence.xml
ある時点で動的に構築されるネイティブ クエリを使用する必要があります。Oracle のデフォルトではschema
、クエリを作成するためにテーブル名に を指定する必要がありますが、スキーマ名にアクセスすることはできません (そうすべきではありません)。
まず第一に、これは期待される動作ですか?実行する場合SELECT * FROM TABLE
、Hibernate はデータソース パラメータに名前を変更し、SELECT * FROM SCHEMA.TABLE
代わりに実行する必要がありますか?
そうでない場合、動的にスキーマ名を取得する方法はありますか? データソースが WebLogic/JBoss によって管理されている場合でも?
java - JPAネイティブクエリの結果にIDを割り当てる最も簡単な方法は何ですか?
JPA でネイティブ クエリとして実装している複雑な SQL クエリがあります。エンティティ マネージャーは、結果セットの各行をPerson
オブジェクトに自動的に変換しています。List<Person>
entityManager は、Student
Bean に で注釈が付けられていることを要求@Entity
します。これには@Id
. API では、すべてのフィールドが一致している必要もあります。残念ながら、私の select 句はさまざまなソースからプルするため、実際には Id はありません。実際、後で を呼び出したときに ID を生成したいと考えていますStudentRepostiory.save(student)
。
私はキャッチ22の状況にいます。オブジェクトを生成するには ID が必要ですが、まだ ID がありません。
私は何をすべきか?
- IDをnullにしてみました。すべての結果を null にします。
- IDをゼロにしてみました。すべての結果が同じになります。
- Generation Strategy アノテーションを追加してみました。何もしませんでした。
ご参考までに
学生.java