私は日付が、テーブルを移入取得することにより、データベースに格納されたデータを取得しようとしています。
List<String> contents = new ArrayList<>();
List<Record> records
try {
Session session = sessionFactory.getCurrentSession();
Query<World> query = null;
query = session.createQuery("from World where date like :dateCont, World.class);
query.setParameter("dateCont", "%" + contents.get(0) + "%");
worlds = query.getResultList();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ここでの問題は、それは私にエラー例外を与えるということです。
java.lang.ClassCastExceptionが:クラスjava.lang.Stringクラスjava.util.Dateにキャストすることはできません(java.lang.Stringでとjava.util.Dateローダー「ブートストラップ」のモジュールjava.baseです)
私はので、間違っているものを知っているList<String> contents
値は、文字列と日付に変換する必要があるが、私は非常に多くのコードを試してみましたが、それは動作しません。
//The following are the codes that I tried but it won't work:
//FIRST
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(contentsStart.get(0));
new SimpleDateFormat("yyyy-MM-dd").format(date);
//---------------------------------------
//SECOND
Date newDate;
DateFormat formatter = null;
formatter = new SimpleDateFormat("yyyy-MM-dd");
newDate = (Date) formatter.parse(contentsStart.get(0));
だから、これまでに与えられた値を変更する方法はありますが、それはフォーマット「YYYY-MM-DD」を保持しなければならないとデータ型が日付でなければなりません。
PS:データベース内の日付の形式は「YYYY-MM-DD」です。DBからの私の日付エンティティフィールドと日付の両方が彼らのデータ型との両方日です。
あなたは使用することができlike
、オペレータのみ文字列の(VARCHAR
)のフィールドを。WHERE句では、使用できるようにするために(フォーマット機能を使用して)文字列に自分のフィールドを変換する必要がありますLIKE
。クエリでCONVERT関数(も)を呼び出す必要がありますので。
あなたはネイティブクエリに切り替える必要がありますので、残念ながら、DATE関数は、EJBQLではありません。たとえば、Oracleのためにあなたが使用することができますTO_CHAR
。このよう
SELECT ... WHERE TO_CHAR(date, 'MM/DD/YYYY') LIKE ...
良好なパフォーマンスのためには、機能的なインデックスを追加する必要があります。
参照してくださいhttp://www.sqlines.com/oracle-to-sql-server/to_char_datetime
一つの選択肢は、新しい文字列列を追加することですdate_string
あなたの日付のフォーマットされた表現が含まれているとし、この列を使用します、LIKE
。しかし、あなたは両方の日付が常に同期されていること、絶対に確認する必要があります。