2016-08-19 6 views
-1

私は私が財産MySQLデータベースから休止状態にテーブルから最後に挿入IDを取得します

@Column宣言しているアイテムの名前付きエンティティ持っている(名前=「ITEM_CODE」、ユニーク=真、長さ= 30) プライベートString itemCode

対応するテーブルに新しい項目を挿入していますが、PROという接頭辞を付けて一意のコードを生成しようとしていて、次にRandomクラスを使用して生成された乱数を連結しています。 私はまた、データベースに挿入された最後のアイテムIDを取得し、idを1つ追加して、それを製品コードに接尾辞として追加しようとしています。 私の目的を達成するために私のコードは、私はまた、メソッド本体のコードの行を使用して試みた

パブリック文字列generateItemCode(){

String query = "SELECT max(i.id) FROM ITEM i"; 
List list = sessionFactory.getCurrentSession().createQuery(query).list(); 
int nextInsertId = ((Integer) list.get(0)).intValue() + 1; 
Random random = new Random(); 
int number = random.nextInt(9999 - 1 + 1) + 1; 
return "" + number+nextInsertId; 

}

あります。

int maxId= (Integer)sessionFactory.getCurrentSession().createQuery("select max(id) from items").uniqueResult(); 

上記のコードは機能しません。 最後に挿入されたIDはどのように取得できますか?それを行う簡単な方法はありますか? ありがとうございます。

+0

あなたはHibernateのIDジェネレータを使用していない理由:、一緒に作品を置くために、次の動作するはず

? – markbernard

答えて

0

実際にはHibernateにネイティブクエリを実行するのではなく、HQL/JPQLクエリを実行するように要求しているときに、クエリ構文がネイティブSQLを模倣している可能性があります。

私たちは、あなたが使用することになり、あなたのエンティティはidという名前の識別子プロパティを持つItem命名されたと仮定した場合:

SELECT max(i.id) FROM Item i 

あなたは、私は、プロパティ名idとエンティティ名Item(ケースがここで重要な使用に気づくでしょう)。

// be sure to check for null lastId in case you have no items. 
final String sql = "SELECT max(i.id) FROM Item i"; 
Integer lastId = (Integer) session.createQuery(sql).uniqueResult(); 
+0

ありがとう@Naros。それは私のために働いた。 –

関連する問題