• 締切済み

hibernateのログ出力について

現在hibernateにてSQLのログを出力しようと思っているのですが、 show_sqlをtrueに設定してもログに出力される内容はバインドされる前のログしかでてきません。 バンド後のログを出力する方法はあるのでしょうか? それと、hibernateがはくログに実行したユーザ名などを付与したいと思っています。 そういうことも可能なのでしょうか? # hibernateのログにほかの情報を付け加えたいと思っています。 たとえば、現在以下のようにログが出力されています。 Hibernate: select test10_.no as no, test10_.memo as memo, test10_.memo2 as memo2 from test1 test10_ where (test10_.no=? ) これを以下のように修正することなどは可能でしょうか? Hibernate: select test10_.no as no, test10_.memo as memo, test10_.memo2 as memo2 from test1 test10_ where (test10_.no='1' ) 【実行ユーザ:user1】

みんなの回答

回答No.2

私も昔、同じ問題に直面しました。 そのときにソースコードを追いかけてみましたが、たしか出力できなかったと思います。(バージョン2系でしたが) しょうがないのでRDBMS側でクエリログを出すという方法を採った記憶があります。

全文を見る
すると、全ての回答が全文表示されます。
noname#86752
noname#86752
回答No.1

Hibernateでは、できないと思います。 p6spyを使えばSQLが見れますよ。

rikiponpon
質問者

補足

さっそくのお返事ありがとうございます。 p6spyというもは知りませんでした。 これを使えばバインド後のSQLが見えるのですね。 ただ、p6spyなどは使用できそうにないんです。。 使えるのはstruts、log4j、hibernateです。。 バインドの値は他のログで出力すればいいとして。。。 Hibernateが出力するログに付加情報を付け加えるのもやはり無理ですかね。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • hibernate toolsのHQLエディタについて

    Eclipseパーフェクトマニュアルvol.6(技術評論者)のspring+hibernateのサンプルを作成しているのですが、 HSQLDBを使用してドライバの設定もウィンドウの設定のドライバ定義でjarファイルを追加しています。 HSQLDBは起動させています。 <問題点> hibernate toolsのHQLエディタでfrom Customerと入力するといかのようなエラーが表示さす。. hibernate.exception.SQLGrammarException: could not execute query hibernate構成のデータベースをクリックしてもなにも表示されません 接続テストでpingには成功しています session factoryは表示されています。 Hibernate動的SQLプレビューの内容は以下のとおりです。 0: sample.entity.Customer ----------------- select customer0_.ID as ID34_, customer0_.NAME as NAME34_, customer0_.ADDRESS as ADDRESS34_, customer0_.AGE as AGE34_ from T_CUSTOMER customer0_ HSQL Database Managerで接続できることは確認しています。 どうかご教授よろしくお願いします。

  • 複数の副問合わせにて、一つだけデータがない場合の対処法は?

    テーブルの各区分に応じて、数量を個々に集計するSQLを作成しております。 そして以下のようなSQLを作りました。 SELECT TBLA.SURYO_1 ,TBLB.SURYO_2 , TBLC.SURYO_3 ,TBLD.SURYO_4 FROM (SELECT SUM(SURYO) AS SURYO_1 FROM TEST_TABLE WHERE TEST_KUBUN = '1' GROUP BY SURYO) TBLA, (SELECT SUM(SURYO) AS SURYO_2 FROM TEST_TABLE WHERE TEST_KUBUN = '2' GROUP BY SURYO) TBLB, (SELECT SUM(SURYO) AS SURYO_3 FROM TEST_TABLE WHERE TEST_KUBUN = '3' GROUP BY SURYO) TBLC, (SELECT SUM(SURYO) AS SURYO_4 FROM TEST_TABLE WHERE TEST_KUBUN = '4' GROUP BY SURYO) TBLD しかし、この方法ですと、区分'1','2','4'はデータがあるのに対して、区分'3'は データがないことにより、SQLを実行すると、対象データがないという結果となります。 当然個別にSQLを実行すればよいですが、速度的に4回もSQLを実行するのは効率悪いので、 出来れば一回で行いたいのですけど、区分'3'がデータがなくても、他の3つの区分のデータ を取得する方法はありますでしょうか? よろしくお願いします。

  • SQL*Plusの実行結果にSQL文も残したいです

    SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか? 以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ 残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは 出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと 考えているのですが、何かよい方法はないものでしょうか? [ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log ■環境 Red Hat Linux 4 Oracle10g ■以下test01.sqlの中身です。 ---ここから-------------- create table ex01 ( c1 number, c2 varchar2(10), c3 varchar2(40) ); insert into ex01(c1,c2,c3) values(1,'AA1','BBB1'); select * from ex01; update ex01 set c2='aa1' where c1 =1; select * from ex01; exit; ---ここまで-------------- ■以下ログファイルの中身です。 ---ここから------------------ [ama@rh01 test]$ cat test01.log 省略 With the Partitioning, OLAP and Data Mining options に接続されました。                       ←ここにcreate文を出力したいです。 表が作成されました。                       ←ここにinsert文を出力したいです。 1行が作成されました。                       ←ここにselect文を出力したいです。 C1       C2   C3 ---------- ---------- ---------------------------------------- 1        AA1   BBB1                       ←ここにupdate文を出力したいです。 1行が更新されました。                       ←ここにselect文を出力したいです。 C1      C2 C3 ---------- ---------- ---------------------------------------- 1 aa1 BBB1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。 [ama@rh01 test]$ -------------------ここまで--------------- どなたか良いアドバイスいただけたらと思います。 どうぞよろしくお願いします。

  • SQL Developerでクエリ実行

    select * from テーブルA where カラムA2 = :バインド変数 select * from テーブルB where カラムB2 = :バインド変数 SQL Developerでエディタに記述した複数のSQLを一度に実行する際に ①同じ名前のバインド変数であっても何度も値を聞いてくるのを1回で済ませたい ②SQLごとにひらく問い合せ結果について名前が問い合せ結果1、問い合せ結果2だとわかりづらいので、固有の名前をクエリ実行時に自動でつけるようにしたい よろしくお願いします。

  • Access、SQLステートメントでの仮テーブルの作り方について

    AccessのSQLステートメントで仮テーブルを使ったSQLを作りたいのですが、構文の書き方がよくわかりません。 わからないなりに以下のようなSQL文を作ってみたのですが、 SELECT TBL.NO FROM [SELECT NO FROM ○○TBL WHERE △△="△△" GROUP BY NO HAVING (Mid(××,2,1)="K") ]. AS TBL; (本当はWHEREのあとにANDがたくさんあります) 実行すると、 「パラメータや別名が正しいこと、無効な文字や区切り記号が含まれていないこと、または名前が長すぎないことを確認してください。」 とメッセージが出ます。 仮テーブルに長いSELECT文をつかうことはできないのでしょうか? ちなみに環境はOS:Win2000+Access2000です。 どなたかアドバイスください。 よろしくお願いします。

  • 変数の取り扱いについて

    はじめまして。思いっきりSQLSERVERは初心者なんですが宜しくお願いします。 現在SQLSERVER2005です。 ややこしくなるので要点だけ以下まとめています。 変数を利用してレコードを抽出する時なんですが… ALTER PROCEDURE Test @Rank INT BEGIN DECLARE @SELECT AS VARCHAR(100) DECLARE @WHERE AS VARCHAR(100) DECLARE @SQL AS VARCHAR(200) SET @SELECT = 'SELECT * FROM tblA ' SET @WHERE = 'WHERE Rank > ' + @Rank SET @SQL = @SELECT + @WHERE EXEC(@SQL) END 実行すると varchar の値 'WHERE Rank > 'をデータ型 int に変換できませんでした。 となります。 Rank部分が数値なんですが、どのように取扱いすべきなんでしょうか。

  • SQL実行結果の出力を見やすくしたい

    Oracle 10gを使用して勉強をしています。 SQL実行結果の出力が見にくくて困っています。 以下、(1)は自分が実行したSQL文ですが、(2)のように見やすく出力したいです。 どのようにすればよいのでしょうか? また参考となるWEB URLがある場合、頂けたら嬉です。 (1)自分が実行したSQL文 SQL> select 2 sid,serial#,username,osuser,program,machine,terminal 3 from v$session 4 where type = 'USER'; SID SERIAL# USERNAME ---------- ---------- ------------------------------ OSUSER PROGRAM ------------------------------ ------------------------------------------------ MACHINE ---------------------------------------------------------------- TERMINAL ------------------------------ 543 39 SYS oracleuser sqlplus@HOGE-net (TNS V1-V3) HOGE-net pts/1 SID SERIAL# USERNAME ---------- ---------- ------------------------------ OSUSER PROGRAM ------------------------------ ------------------------------------------------ MACHINE ---------------------------------------------------------------- TERMINAL ------------------------------ 544 5 SYS oracleuser sqlplus@HOGE-net (TNS V1-V3) HOGE-net pts/0 (2)こんな感じで出力させたいです。 select sid,serial#,username,osuser,program,machine,terminal from v$session where type = 'USER'; SID SERIAL# USERNAME OSUSER PROGRAM  MACHINE   TERMINAL ---- ------- --------- ------ ---------- ---------  -------- 139     2      TEST Owner sqlplus.exe   HOGE_XP HOGE_XP 144     20    SYSTEM      ORACLE.EXE HOGE_XP  HOGE_XP

  • sedに関する質問

    ★以下のファイルがあるとします。 SQL> select count(*) from koumoku where no = 1052 and mid =2; COUNT(*) ---------- 7 SQL> select count(*) from koumoku where no = 1053 and mid =3; COUNT(*) ---------- 4 SQL> select count(*) from setumei where no = 1054 and mid =2; COUNT(*) ---------- 9 SQL> select count(*) from setumei where no = 1055 and mid =7; COUNT(*) ---------- 5 SQL> select count(*) from imi where no = 1056 and mid =2; COUNT(*) ---------- 9 SQL> select count(*) from imi where no = 1057 and mid =6; COUNT(*) ---------- 3 ★ここでsedコマンドを利用して、 koumoku COUNT(*) ---------- 7 koumoku COUNT(*) ---------- 4 setumei COUNT(*) ---------- 9 setumei COUNT(*) ---------- 5 imi COUNT(*) ---------- 9 imi COUNT(*) ---------- 3 のように取り出したいのですが、方法が分からないので、 誰か教えてもらえますか?宜しくお願いします。

  • SQLインジェクションの対策

    SQLインジェクションの対策 いつもお世話になっております。 SQLインジェクションの対策についてお伺いいたします。 もともと↓のようなSQL文だったものを "select user_id from table where user_id='{$user_id}'" 以下のように変更しました。 "select user_id from table where user_id='" . mysql_real_escape_string($user_id) . "'" 以下のように実行されていたSQL文は select user_idfrom table where user_id='10001' and 'a'='a' ↓のようにエスケープ処理して実行されるようになりました。(入力値は「10001' and 'a'='a」) select user_id from table where user_id='10001\' and \'a\'=\'a' ですが、phpMyAdminで実行してみるとどちらのSQL文も同じ結果が取得できてしまいます。 これでは対策になっていないと思ったので、質問させていただきました。 (magic_quotes_gpcはoffに設定しています。) なにか他の方法がいいのでしょうか。 ご教示よろしくお願いいたします。 <環境> PHP 5.1.6 MySQL 5.0.45

    • ベストアンサー
    • PHP
  • 集計関数の合計について

    お世話になります。 SQLSever2005を使用しています。 Count(*)で月毎のデータ件数を集計し、またその結果を出力するSQLを考えております。 SELECT  (SELECT Count(*) FROM TBL_TEST T1 WHERE T1.T_DATE>='2005/01/01' AND T1.T_DATE=<'2005/01/31') AS CNT_1,  (SELECT Count(*) FROM TBL_TEST T2 WHERE T2.T_DATE>='2005/02/01' AND T2.T_DATE=<'2005/02/31') AS CNT_2,   (SELECT Count(*) FROM TBL_TEST T3 WHERE T3.T_DATE>='2005/03/01' AND T3.T_DATE=<'2005/03/31') AS CNT_3,   (CNT_1+CNT_2+CNT_3) AS TOTAL_CNT ・・・・・・・・・・・・ (★)  FROM TBL_TEST T  WHERE ・・・・・・・・・ 結果(★)のところで『CNT_1は無効です』というエラーになってしまいます。 ちなみにAccessではエラーにならずに結果を出力していました。 上記のSQL文はどのように修正すればよろしいでしょうか?