質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

5057閲覧

末尾にアンダースコアの付いたクラスのimportが何なのか、ご教授お願いします

_mino_

総合スコア1

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/07/31 10:11

JavaでSpring Bootを利用したWebアプリケーションがあり、そのソースコードを読んでいます。

私はJavaおよびSpring Bootに関しては全くの素人で、いろんな資料を参考にしながらソースコードを読み進めています。

モデルを担当するクラスのインポートに関して、不明な記述があり質問させていただきました。

それは以下のようなコードです。

import com.example.domain.model.Foo; import com.example.domain.model.Foo_;

このcom.example.domain.model.Fooは該当のパスにFoo.javaファイルが存在するのですが、com.example.domain.model.Foo_とアンダースコアが末尾についたものに関しては、ファイルが存在しません。

しかし、これらをインポートしたファイルではFoo_が使用されています。

これは一体どういうことなのでしょうか。

ご教授よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

JPACriteria APIの文脈で出てきたのであれば、おそらくアンダースコアが付いたFoo_クラスは、Fooエンティティのメタモデルクラスだと思います。
メタモデルクラスとは、エンティティのメタデータ(カラム名やカラムのデータ型)を持ったクラスです。

JPAのクエリ(JPQL)は文字列で記述するため、クエリが間違っていても実行時にしかエラーを検知できませんが、メタモデルクラスを使ったCriteria APIでは、クエリの間違いはコンパイル時点で検出できるのでより型安全です。

下記はメタモデルクラスを使ったコード例です。

Root<Employee> employee = query.from(Employee.class); query.select(employee) .where(cb.equal(employee.get(Employee_.dept), "Admin"));

メタモデルクラスを使わないと、このようにカラム名を文字列で記述することになり、メタデータが変わっても(カラム名が変更されるなど)コンパイルエラーにはなりません。

Root<Employee> employee = query.from(Employee.class); query.select(employee) .where(cb.equal(employee.get("dept"), "Admin"));

投稿2020/07/31 12:56

rubytomato

総合スコア1752

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

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

_mino_

2020/08/03 01:15

ご教授いただき、誠にありがとうございます。 返信が遅くなりましたこと、お詫びいたします。 ご指摘の通り問題の`import`文は`JPA`に関する文脈で記載されております。 **メタモデルクラス**に関して初耳であるため、リンク先を参考に学習したいと思います。 こちらを理解した上で、再度ソースを確認いたします。 参考文献をご紹介いただき、またサンプルをご用意くださりましたこと、大変に助かります。 ありがとうございました。
guest

0

_は、クラス名や変数名に利用することができます。FooというクラスとFoo_というクラスがある。ただそれだけです。abと一緒で、特別な意味はないでしょう。
# Java9からは_一文字だけの名前は、付けられなくなりましたが。
Foo_.javaファイルはみつからないかもしれませんが、Foo_.classファイルはどこかに存在しているはずです。なんらかのツールが自動的に生成するクラスなのかもしれません。

投稿2020/07/31 10:22

編集2020/07/31 10:34
shiketa

総合スコア4061

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

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

_mino_

2020/08/03 01:06

ご教授いただき、誠にありがとうございます。 返信が遅くなりましたこと、お詫びいたします。 確かに、オブジェクトファイル出力先の`build`フォルダを確認すると、ご指摘の通り`Foo_.class`(だけでなく`Foo_.java`)の存在を確認することができました。 これが何なのか、誰が出力しているのか、調べたいと思います。 貴重なお時間をいただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問