チュートリアルと同様のWebアプリケーションを作成しました: https://spring.io/guides/tutorials/react-and-spring-data-rest/JPAでSpringのカスタムクエリ
postgresql dbを追加しましたが、すべて正常に動作します。私は基本的なクエリfindByUsername(String name)がうまく動作するリポジトリにあります。私の問題は、何らかの理由でカスタムクエリを作成できないということです。例えば
"SELECT CURRENT_TIMESTAMP"
です。
私はちょうどこのステートメントの値を取得したいテストを行います。そして、できないで、私は:)
私のGoogleの検索結果は私のクラス
@Autowired EntityManager entityManager;
にこれを追加し、その上でクエリを作成するために私を提案したのか分からない意味します。しかし、何らかの理由でentityManager
が初期化されることはありません。常にnullを返します。これは正しい方法ですか、私はちょうど何かを欠いていますか? spring-boot-starter-jdbc
を追加してJdbcTemplateを使用しようとしましたが、nullでもありました。
EDIT
私の問題は、春の少なすぎる知識でした。
私はこのようなクラスを持ち、そこでオートワイヤーを使用しようとしました。
public class Person {
@Autowire
MyRepo myRepo;
private String p;
public Person(String p) {
this.p = p;
}
私が後で理解したように、Springはこれを選択しません。私はPerson per = new Person("string");
でRestControllerでこのクラスを呼び出しました。私が作った ソリューションは、私のRestControllerクラスにAutowire MyRepoにした、私の個人のコンストラクタの内容は、Personクラスでautowireを削除し、この
public Person(String p, MyRepo myRepo) {
this.p = p;
this.myRepo = myRepo;
}
のように見えました。このようにして、私はmyRepoをPersonクラスで初期化してそこで使用することができました。これは私の問題のための最高のsoutionではありません。
私の2番目の問題です。私はこの作業をした後、PersonクラスにEntityManagerをautowireしようとしました。 MyRepoをEntityManagerに置き換え、初期化しました。今問題は私の次のコード行Integer i = (Integer) em.createNativeQuery("select 1", Integer.class).getSingleResult();
です。ここでエラーが発生しますjavax.persistence.PersistenceException:org.hibernate.MappingException:不明なエンティティ:java.lang.Integer。 このステートメントの目的は、応答する場合、自分のDBへの簡単なクエリを作成することです。
なぜ「h2」タグですか? –
ああ、言及するのを忘れて、またh2の依存関係があります。これがここに関係するかどうかはわかりません。 – JamesLinux
'@PersistenceContext EntityManager entityManager;'。 JPAはかなり複雑な獣です。 SpringとSpringのデータJPAがその上にあります。あなたはそれに入る前にドキュメンテーションを読む方がよいでしょう。 –