🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

1回答

835閲覧

SpringData JPA カラム名に”ID”がある場合、起動時に異常終了

tsizuku

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2021/02/09 05:12

編集2021/02/09 10:39

SpringData JPAを使って、データベースにアクセスしています。
リポジトリにQuery自動生成するfingBy△△△メソッドを定義していますが、
テーブルのカラム名が”EMPL_ID”のような”ID”のキーワードを
含んでいると起動時に異常終了してしまいます。
解決策はありますでしょうか?

◆環境
Spring Tool Suite 4 Version: 4.8.1
SpringBoot2
Java8

◆リボジトリ

@Repository public interface BsLoginUserRPS extends JpaRepository<BsLoginUser,String>{ // JPAメソッドによるQuary自動生成(カラム名に連動) public Optional<BsLoginUser> findByLOGIN_IDAndCOMPANY_ID(String lid,String cid); }

◆テーブル

CREATE TABLE BS_LOGIN_USER ( LOGIN_ID VARCHAR2(8) NOT NULL ENABLE, COMPANY_ID VARCHAR2(20), PASSWORD VARCHAR2(50), NAME NVARCHAR2(20) )

◆エンティティ

@Entity @Table(name = "BS_LOGIN_USER") public class BsLoginUser { /** * loginIdプロパティ */ @Id @Column(name = "LOGIN_ID") public String loginId; /** * companyIdプロパティ */ @Column(name = "COMPANY_ID") public String companyId; /** * passwordプロパティ */ @Column(name = "PASSWORD") public String password; /** * nameプロパティ */ @Column(name = "NAME") public String name; }

◆エラー

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-02-09 11:38:36.795, [ ERROR ], org.springframework.boot.SpringApplication, Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'loginSevice': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bsLoginUserRPS' defined in jp.psf.shoryu.Repository.BsLoginUserRPS defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional jp.psf.shoryu.Repository.BsLoginUserRPS.findByLOGIN_IDAndCOMPANY_ID(java.lang.String,java.lang.String)! No property LOGIN found for type BsLoginUser!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/09 06:42

これだけで答えられることはないかと。 テーブル定義、実装、コード バージョンを追記してください。 それに強制終了 ログにエラー等記録されてるのでは?
tsizuku

2021/02/09 10:39

ご指摘の点、追記致しました。
guest

回答1

0

findByLOGIN_IDAndCOMPANY_ID(String lid, String cid)のように、メソッド名に_を入れると、公式マニュアル曰く、"Traversal point"として解釈されるようです。

つまり、このメソッド名を見たSpringは、

  • BsLoginUserエンティティにはLOGINというフィールドがあり、
  • そのフィールドは別のエンティティを指しており、
  • そのエンティティにはIDというフィールドがあるはずで、
  • それと、引数のlidを比較しよう

と試みます。しかし、BsLoginUserエンティティにLOGINというフィールドは存在しないので、"No property LOGIN found for type BsLoginUser"というエラーが出てしまいます。

カラム名ではなく、フィールド名を使って、findByLoginIdAndCompanyId(String lid, String cid)とすれば、うまくいくと思いますよ。

投稿2021/02/10 03:03

gpsoft

総合スコア1323

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsizuku

2021/02/12 12:21

それも試してみましが、下記のエラーになりました。 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'loginSevice': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bsLoginUserRPS' defined in jp.psf.shoryu.Repository.BsLoginUserRPS defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional jp.psf.shoryu.Repository.BsLoginUserRPS.findByLoginId(java.lang.String)! No property id found for type String! Traversed path: BsLoginUser.login.
gpsoft

2021/02/12 14:07

不可解なエラーですね。BsLoginUserクラスは変更してませんか? loginという名前のフィールドなんか無いですよね?
tsizuku

2021/02/12 23:49

はい、Grepして調べたのですがありませんでした。 色々と名称を変えて試したのですが、テーブルのカラム名に”ID”を持っている カラムで全く動かず、”ID”を持たないカラムでは正常に動くことから IDをと言うキーワードが問題に見えます。
gpsoft

2021/02/13 04:52

そうですか。ご使用中の環境特有の現象かもしれませんね。私の環境では再現できませんでした。お役に立てず残念です。
tsizuku

2021/02/13 09:41

いいえ、お付き合い頂き有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問