ご注意ください

  • 当ブログのコメントやトラックバックに、アカウントハックサイトや、そのようなサイトへリダイレクト(転送)される可能性が高いサイトへのリンクが時々貼られているようです。
    そのようなサイトへのリンクが貼られたコメント・トラックバックは、見つけ次第削除・禁止ワード登録していますが、今後も危険なサイトへのリンクが貼られる可能性がありますので、安易にリンク先へ飛ばないよう充分ご注意ください。

オンラインゲーム関連

著作権表示

  • 当ブログに記載されている
    会社名・製品名・システム名などは、
    各社の登録商標、もしくは商標です。

    当ブログ上の文章・写真・画像の
    無断転載、無断転用、直リンクなどは
    行わないでください。

    (C) 1998-2016 Vertex.
    (C) 2002-2016 SQUARE ENIX CO., LTD.
    (C) CAPCOM CO., LTD. 2007, 2016

    All Rights Reserved.
無料ブログはココログ

« 2008年5月 | トップページ | 2008年7月 »

[Java/JPA] ネイティブクエリ Part.2

前にネイティブクエリの使い方を記事にしたとき、マッピングしなければ普通にオブジェクト型で取れる、と書いたものの、実はそんなに容易いものではありませんでした・・・。

プライマリキーが変動したり、プライマリキーにしないといけないカラムにnullが入っている可能性があるため、マッピングする方法が使えない!・・・という事態にぶつかってしまったため、オブジェクト型で取る方法を試してみたところ、どうやらtoplinkの仕様ではオブジェクト型ではなく、Vector型に値をセットしてくるとのこと。

Vector型?なにそれ?

調べてみたら、Listを継承していて、ArrayListと兄弟のような型らしい。

だったら簡単じゃん、と思って、以下のようにしてみました。実際に同じコードを作ったわけではなく、以下はサンプルということで。さらに言うと、try/catchやクラスなどを省略しています。

Vector<Object[]> result = null;
Query q = this.em.createNativeQuery("SELECT a, b, c FROM table_name");
result = (Vector<Object[]>) q.getResultList();
for (Object[] obj : result) {
    this.valueA.add((String) obj[0]);
    this.valueB.add((Integer) obj[1]);
    this.valueC.add((String) obj[2]);
}

デバッグモードで見ていくと確かに値は取れているものの、for文でエラーが出る。Vector型からObject型にキャストはできません、と。

Vector.toArray()がObject[]型で値を返すので、Object[] obj = result.toArray()を試してみても、なぜかobjはVector型だからObjectにキャストできないと怒られる。

デバッグモードで値を見ると、確かにVector<E>と出ている。なんだこれ?

じゃあ、Vectorの中もVectorなら、これならどうだ!と試してみたのが以下のやり方。

Vector<Vector<Object[]>> result = null;
Query q = this.em.createNativeQuery("SELECT a, b, c FROM table_name");
result = (Vector<Vector<Object[]>>) q.getResultList();
for (Vector<Object[]> objVector : result) {
    Object[] obj = objVector.toArray();
    this.valueA.add((String) obj[0]);
    this.valueB.add((Integer) obj[1]);
    this.valueC.add((String) obj[2]);
}

ふつーに動いた。

これが合ってるのか間違ってるのかはわからないけど、結果が正しいから間違ってはいないのかな。

とりあえず動かすことができたので、備忘録としてメモメモ。

これ間違ってるよ!とか、わかってないなぁ…こうなんだよ!なんてご意見があれば、どしどし募集します!いまだにVectorが良くわからないので教えてください!(苦笑)

あ、ちなみに。

この方法でDBからデータを取得すると、文字列カラムはString、数値カラムはBigDecimalとして受け取ってあげればいいようです。

たばこ1箱1000円也

元々、たばこ1箱が1000円になったら、どれくらいの人が禁煙するようになるか、という話から始まったと思ったのですが・・・なにやら日本の中枢で国民の血税を貪ってる方々が、1箱1000円にした場合の税収の計算に躍起になっているそうな。

こういうの、取らぬ狸の皮算用、と言います(笑)

たばこは誰の目から見ても、百害あって一理もない嗜好品ではありますが、安易に1箱1000円に値上げを示唆するような今の状態はなんなんでしょ。今の雰囲気だと、本気で値上げしかねない状態。

自分はたばこを吸わないので値上げしても影響はありませんが、一服が至福のひと時という方もいるのは確かなわけで。何でもかんでも税金税金というこの世の中がますます嫌になってきた今日この頃、みなさまいかがお過ごしでしょうか、ってなもんだヽ(`Д´)ノ

1箱1000円になったら、たばこ業界で仕事をしている方々の何割くらいが路頭に迷うことになるんだろう。お金のことで頭がいっぱいな方々には、そんなことはどうでもいいんだろうなぁ。

いいよなぁ。財政が大赤字でも、節約とか倹約とか無駄を省く努力をしないで、下々の者から税金の名目でお金を巻き上げればいいんだもんなぁ。


------ 以下、Yahoo!ニュースより ------

たばこ1000円、最大6兆円増収 厚労省研究班試算 8割禁煙でも現状維持

 たばこを1箱1000円に値上げした場合、最大5兆9000億円の税増収が見込めるとの試算を、厚生労働省研究班(主任研究者・高橋裕子奈良女子大教授)が25日までにまとめた。最大の増収幅は、日本学術会議の試算(約4兆円)を上回った。
 現行のたばこ関連税は、1箱(20本入り、平均約300円)当たり約175円で、総額約2兆2000億円。研究班は、価格が1000円になるよう税額を上げた場合、喫煙者がどの程度減少するかを、たばこの価格変動が喫煙行動に与える影響をまとめた過去の文献などを基に試算した。
 それによると、値上げに伴い1箱当たりの税額は875円と5倍に増加。これに伴い、たばこ関連税も今の喫煙者数のままなら11兆円と5倍になる。
 ただ喫煙者は51・3~25・9%減ると予測、たばこ関連税は5兆3570億~8兆1510億円となり、3兆1000億~5兆9000億円程度の増収となるとしている。また喫煙者が80%減っても、2兆2000億円はまかなえると指摘。高橋教授は「値上げが実現しても、8割の人が禁煙するのは欧米の状況を見ても想定しにくく、税収減はあり得ない」と話す。
 来年度に予定されている基礎年金の国庫負担引き上げに伴い必要な2兆3000億円を捻出(ねんしゅつ)するため、ここ最近、与野党の国会議員の間で1箱1000円への値上げの動きが浮上。業界側は猛反発している。

http://headlines.yahoo.co.jp/hl?a=20080625-00000098-san-soci

岩手・宮城内陸地震

今朝8時43分ごろ、岩手・宮城内陸で大きな地震が発生。岩手県の奥州市と、宮城県の栗原市で震度6強だったそうな。その後の余震でも震度4くらいのものがあったり、震度1~3が1時間に数件ずつ頻発しているようです。

我が家では、休日なのでゆっくり寝坊をしていたのですが、大きめの揺れで起こされました。1ヶ月ほど前には茨城県沖で震度5弱を観測する地震があり、さらに中国四川でも大きな地震があり、つい先日は長野県でも震度4の地震があった矢先のことで、またか!という感じです。

すでに6人の方がこの地震で命を落としてしまったとのことですが、これ以上被害が大きくならないことを祈りつつ、亡くなられた方のご冥福をお祈りします。

地震大国日本とは言いますが、ここ最近大きな地震が多くて不安です。

[Java/JPA] ネイティブクエリ

SQLではできるけど、JPQLではどうしても実現できない条件があり、ネイティブクエリを使ってSQLを直接記述する方法を勉強したので、備忘録ということで。

まずはDBアクセスクラスにクエリを記述。

@Stateless
public class DbNativeQuery
       implements Serializable, IDbNativeQuery {

    private static final long serialVersionUID = 123456789L;

    @PersistenceContext(unitName = UnitName")
    private EntityManager em;

    public final List < DbList > outputList() {
        String sql = "SELECT id AS ID, name AS NAME, age AS AGE "
                   + "FROM table";
        List < DbList > list = null;
        try {
            Query query = em.createNativeQuery(sql, "DbList");
            query.setHint(TopLinkQueryHints.REFRESH, HintValues.TRUE);
            list = (List < DbList >) query.getResultList();
        } catch (Exception e) {
            System.out.println("Exception! [" + e.getMessage() + "]");
        }
        return list;
    }
}


続いて、エンティティクラス。

@SqlResultSetMapping(name = "DbList", entities = {
    @EntityResult(entityClass = DbList.class, fields = {
    @FieldResult(name = "ID",   column = "ID"),
    @FieldResult(name = "NAME", column = "NAME"),
    @FieldResult(name = "AGE",  column = "AGE")
    })
})
@Entity
public class DbList implements Serializable {
    private static final long serialVersionUID = 987654321L;

    @Id
    @Column(name = "ID")
    private String id;
    @Column(name = "NAME")
    private String name;
    @Column(name = "AGE")
    private String age;

    public DbList() {
    }

    public DbList(final String argId,
                  final String argName,
                  final String argAge) {
        this.id   = argId;
        this.name = argName;
        this.age  = argAge;
    }

    以下、必要に応じてgetterやsetterなど
}


上記のクエリならJPQLでも取れますが、まあごくごく簡単な条件でのネイティブクエリの使い方ということで。

ちなみに、マッピングしないのであればもっと簡単に書くことができますが、その辺は省略ということで。普通にオブジェクト型の配列で取れますし。

« 2008年5月 | トップページ | 2008年7月 »

フォト
2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

最近のトラックバック