<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kinopyo Blog &#187; Java</title>
	<atom:link href="http://www.kinopyo.com/blog/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kinopyo.com/blog</link>
	<description>プログラマとしてRuby, Rails, iPhone, iPad,Macなどなどと向き合う日々のログポース</description>
	<lastBuildDate>Sun, 08 Jan 2012 14:59:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<atom:link rel='hub' href='http://www.kinopyo.com/blog/?pushpress=hub'/>
		<item>
		<title>Spring DataSource beanのメモ</title>
		<link>http://www.kinopyo.com/blog/how-to-define-spring-datasource-bean</link>
		<comments>http://www.kinopyo.com/blog/how-to-define-spring-datasource-bean#comments</comments>
		<pubDate>Mon, 06 Dec 2010 09:28:09 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1575</guid>
		<description><![CDATA[
DataSource Beanを定義する際applicationContext.xmlの書き方と、Javaで呼び出すコードのメモです。ずいぶん昔のメモです。。
こんなjdbc.propertiesファイルがクラスパスにあるとします。

jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:~/test
jdbc.username=sa
jdbc.password=

そしてSpringのapplicationContext.xmlにはこう書きます。

&#60;context:property-placeholder location=&#34;jdbc.properties&#34;/&#62;

&#60;bean id=&#34;dataSource&#34;
	class=&#34;org.springframework.jdbc.datasource.DriverManagerDataSource&#34;&#62;
	&#60;property name=&#34;driverClassName&#34; value=&#34;${jdbc.driverClassName}&#34; /&#62;
	&#60;property name=&#34;url&#34; value=&#34;${jdbc.url}&#34; /&#62;
	&#60;property name=&#34;username&#34; value=&#34;${jdbc.username}&#34; /&#62;
	&#60;property name=&#34;password&#34; value=&#34;${jdbc.password}&#34; /&#62;
&#60;/bean&#62;

&#60;bean id=&#34;accountDao&#34; class=&#34;test.dao.AccountDao&#34;&#62;
	&#60;property name=&#34;dataSource&#34; ref=&#34;dataSource&#34; /&#62;
&#60;/bean&#62;

Javaでの呼び出し：

ApplicationContext context = new ClassPathXmlApplicationContext(
		&#34;applicationContext.xml&#34;);

AccountDao accountDao = (AccountDao) context.getBean(&#34;accountDao&#34;);

// other ...]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>DataSource Beanを定義する際applicationContext.xmlの書き方と、Javaで呼び出すコードのメモです。ずいぶん昔のメモです。。</p>
<p>こんなjdbc.propertiesファイルがクラスパスにあるとします。</p>
<pre class="brush: ;">
jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:~/test
jdbc.username=sa
jdbc.password=
</pre>
<p>そしてSpringのapplicationContext.xmlにはこう書きます。</p>
<pre class="brush: xml;">
&lt;context:property-placeholder location=&quot;jdbc.properties&quot;/&gt;

&lt;bean id=&quot;dataSource&quot;
	class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;&gt;
	&lt;property name=&quot;driverClassName&quot; value=&quot;${jdbc.driverClassName}&quot; /&gt;
	&lt;property name=&quot;url&quot; value=&quot;${jdbc.url}&quot; /&gt;
	&lt;property name=&quot;username&quot; value=&quot;${jdbc.username}&quot; /&gt;
	&lt;property name=&quot;password&quot; value=&quot;${jdbc.password}&quot; /&gt;
&lt;/bean&gt;

&lt;bean id=&quot;accountDao&quot; class=&quot;test.dao.AccountDao&quot;&gt;
	&lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot; /&gt;
&lt;/bean&gt;
</pre>
<p>Javaでの呼び出し：</p>
<pre class="brush: java;">
ApplicationContext context = new ClassPathXmlApplicationContext(
		&quot;applicationContext.xml&quot;);

AccountDao accountDao = (AccountDao) context.getBean(&quot;accountDao&quot;);

// other code...
</pre>
<p></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/how-to-define-spring-datasource-bean/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate：複数項目のPKに対応するアノテーションの記述方法</title>
		<link>http://www.kinopyo.com/blog/how-to-setup-annotation-for-multiple-column-pk-in-hibernate</link>
		<comments>http://www.kinopyo.com/blog/how-to-setup-annotation-for-multiple-column-pk-in-hibernate#comments</comments>
		<pubDate>Fri, 03 Dec 2010 13:07:19 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[annotation]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1572</guid>
		<description><![CDATA[
一つ以上の項目がPKとなったケースでHibernateはどう設定すればいいのかを説明します。
ずいぶん昔のメモになります。
こんなテーブルがあるとします。

create table Account (
	code varchar(255) not null,
	number integer not null,
	description varchar(255),
	primary key (code, number)
);

PKは&#8217;code&#8217;と&#8217;number&#8217;です。
方法は三つあります
まずPKを表すクラスを作ります。PKクラスは以下の条件を満足しなければなりません。

publicクラス
デフォルトのコンストラクタ
シリアライズを実装
hashCode()とequals()を実装

そしてエンティティクラスは以下の三つの方法のうちどれかで実装します。

PKクラスを@Embeddableアノテーションで記述し、エンティティクラスのプロパティとして書いて@Idとマーク
PKクラスをエンティティクラスにプロパティとして書いて@EmbeddableIdとマーク
PKを表す全ての項目をエンティティクラスのプロパティとして登録し@Idとマーク

それぞれのソースコードをリストします。
一番目@Embeddable
ここはAccountとそのPKを表すクラスAccountPkを作成しました。
メリットはPKクラスを再利用できるところです。
もっとも自然的なアプローチだそうです。


package sample.annotations;

import java.io.Serializable;

import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Account {
	private String description;
	private AccountPk id;

	public Account(String description) {
		this.description = ...]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>一つ以上の項目がPKとなったケースでHibernateはどう設定すればいいのかを説明します。</p>
<p>ずいぶん昔のメモになります。</p>
<p>こんなテーブルがあるとします。</p>
<pre class="brush: sql;">
create table Account (
	code varchar(255) not null,
	number integer not null,
	description varchar(255),
	primary key (code, number)
);
</pre>
<p>PKは&#8217;code&#8217;と&#8217;number&#8217;です。</p>
<h4 id="hs_3d9be0e60d28811f33504034affb9171_header_0">方法は三つあります</h4>
<p>まずPKを表すクラスを作ります。PKクラスは以下の条件を満足しなければなりません。</p>
<ol>
<li>publicクラス</li>
<li>デフォルトのコンストラクタ</li>
<li>シリアライズを実装</li>
<li>hashCode()とequals()を実装</li>
</ol>
<p>そしてエンティティクラスは以下の三つの方法のうちどれかで実装します。</p>
<ul>
<li>PKクラスを@Embeddableアノテーションで記述し、エンティティクラスのプロパティとして書いて@Idとマーク</li>
<li>PKクラスをエンティティクラスにプロパティとして書いて@EmbeddableIdとマーク</li>
<li>PKを表す全ての項目をエンティティクラスのプロパティとして登録し@Idとマーク</li>
</ul>
<p>それぞれのソースコードをリストします。</p>
<h4 id="hs_3d9be0e60d28811f33504034affb9171_header_1">一番目@Embeddable</h4>
<p>ここはAccountとそのPKを表すクラスAccountPkを作成しました。</p>
<p>メリットはPKクラスを再利用できるところです。</p>
<p>もっとも自然的なアプローチだそうです。</p>
<pre class="brush: java;">

package sample.annotations;

import java.io.Serializable;

import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Account {
	private String description;
	private AccountPk id;

	public Account(String description) {
		this.description = description;
	}

	protected Account() {
	}

	@Id
	public AccountPk getId() {
		return this.id;
	}

	public String getDescription() {
		return this.description;
	}

	public void setId(AccountPk id) {
		this.id = id;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@Embeddable
	public static class AccountPk implements Serializable{
		private String code;
		private Integer number;

		public AccountPk() {
		}

		public String getCode() {
			return this.code;
		}

		public Integer getNumber() {
			return this.number;
		}

		public void setNumber(Integer number) {
			this.number = number;
		}

		public void setCode(String code) {
			this.code = code;
		}

		public int hashCode() {
			int hashCode = 0;
			if (code != null)
				hashCode ^= code.hashCode();
			if (number != null)
				hashCode ^= number.hashCode();
			return hashCode;
		}

		public boolean equals(Object obj) {
			if (!(obj instanceof AccountPk))
				return false;
			AccountPk target = (AccountPk) obj;
			return ((this.code == null) ? (target.code == null) : this.code
					.equals(target.code))
					&amp;&amp; ((this.number == null) ? (target.number == null)
							: this.number.equals(target.number));
		}
	}
}
</pre>
<p>検証するクラスを作成しました。</p>
<pre class="brush: java;">
package sample.annotations;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

import sample.annotations.Account.AccountPk;

public class TestAccount {
	public static void main(String[] args) {
		SessionFactory sessionFactory = new AnnotationConfiguration()
				.configure().buildSessionFactory();
		Session session = sessionFactory.openSession();
		session.beginTransaction();

		Account account = new Account(&quot;This is the first type.&quot;);

		// construct pk value
		AccountPk accountPk = new AccountPk();
		accountPk.setCode(&quot;kinopyo001&quot;);
		accountPk.setNumber(12345);
		// set pk
		account.setId(accountPk);

		// save
		session.save(account);
		session.getTransaction().commit();
		System.out.println(&quot;Commit&quot;);

		// load
		List list = session.createQuery(&quot;from Account&quot;).list();
		Iterator i = list.iterator();
		while (i.hasNext()) {
			Account a = (Account) i.next();
			System.out.println(&quot;code: &quot; + a.getId().getCode() + &quot;, number: &quot;
					+ a.getId().getNumber() + &quot;  Description: &quot;
					+ a.getDescription());
		}
		session.close();

	}
}
</pre>
<p>設定が正しければこんなログが出るはずです。</p>
<pre class="brush: ;">
Commit
code: kinopyo001, number: 12345  Description: This is the first type.
</pre>
<p></p>
<h4 id="hs_3d9be0e60d28811f33504034affb9171_header_2">二番目@EmbeddableId(抜粋)</h4>
<pre class="brush: java;">
@EmbeddedId
public AccountPk getId() {
	return this.id;
}
</pre>
<h4 id="hs_3d9be0e60d28811f33504034affb9171_header_3">三番目@IdClass(抜粋)</h4>
<pre class="brush: java;">
@Entity
@IdClass(Account.AccountPk.class)
public class Account {

	private String description;
	private String code;
	private Integer number;

	public Account(String description) {
		this.description = description;
	}

	protected Account() {
	}

	@Id
	public String getCode() {
		return this.code;
	}

	@Id
	public Integer getNumber() {
		return this.number;
	}

	public String getDescription() {
		return this.description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public void setNumber(Integer number) {
		this.number = number;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public static class AccountPk {
	// ...
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/how-to-setup-annotation-for-multiple-column-pk-in-hibernate/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java：Integer.parseInt時のNumberFormatExceptionについて</title>
		<link>http://www.kinopyo.com/blog/java-number-format-exception-when-parseint</link>
		<comments>http://www.kinopyo.com/blog/java-number-format-exception-when-parseint#comments</comments>
		<pubDate>Fri, 16 Apr 2010 14:39:00 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[トラブル]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1077</guid>
		<description><![CDATA[
ハマっちゃったException第二弾です。
実際はハマったワケではありませんが、
一応こんなExceptionがあると。

String blank = &#34;&#34;;

int i = Integer.parseInt(blank);

これで余裕に下記のExceptionが出ます。


java.lang.NumberFormatException: For input string: ""

何も考えずにあるJavascriptの処理をJavaに書き換える作業で発生したんです。
JavascriptはブランクをparseIntするとNaN(Not a Number)になるが、
Javaは完全におちますね。。。

]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>ハマっちゃったException第二弾です。</p>
<p>実際はハマったワケではありませんが、</p>
<p>一応こんなExceptionがあると。</p>
<pre class="brush: java;">
String blank = &quot;&quot;;

int i = Integer.parseInt(blank);
</pre>
<p>これで余裕に下記のExceptionが出ます。</p>
<pre>

java.lang.NumberFormatException: For input string: ""
</pre>
<p>何も考えずにあるJavascriptの処理をJavaに書き換える作業で発生したんです。</p>
<p>JavascriptはブランクをparseIntするとNaN(Not a Number)になるが、</p>
<p>Javaは完全におちますね。。。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/java-number-format-exception-when-parseint/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java：List操作時のUnsupportedOperationExceptionについて</title>
		<link>http://www.kinopyo.com/blog/java-unsupportedoperationexception-when-manipulate-java-list</link>
		<comments>http://www.kinopyo.com/blog/java-unsupportedoperationexception-when-manipulate-java-list#comments</comments>
		<pubDate>Fri, 16 Apr 2010 14:25:41 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[トラブル]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1074</guid>
		<description><![CDATA[
久々にJavaを書いたので、表題のExceptionにハマっちゃいました。
こんなコードでした。

String[] array = {&#34;a&#34;, &#34;b&#34;, &#34;c&#34;};

List&#60;String&#62; list = Arrays.asList(array);

list.add(&#34;d&#34;);

ちょこっとググッてみたらasListで作ったListに
add()で要素を追加すると上記のExceptionになるそうです。
asListのJavadocでの記載は

指定された配列を基にする固定サイズのリストを返します。返されたリストへの変更は、そのまま配列に書き込まれます。(後は省略)

なるほど。。。
とりあえず深く考えずに下記のように書き換えて回避しました。

String[] array = {&#34;a&#34;, &#34;b&#34;, &#34;c&#34;};

List&#60;String&#62; list = new ArrayList&#60;String&#62;();

list.addAll(Arrays.asList(array)); 

list.add(&#34;d&#34;);


]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>久々にJavaを書いたので、表題のExceptionにハマっちゃいました。</p>
<p>こんなコードでした。</p>
<pre class="brush: java;">
String[] array = {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;};

List&lt;String&gt; list = Arrays.asList(array);

list.add(&quot;d&quot;);
</pre>
<p>ちょこっとググッてみたらasListで作ったListに</p>
<p>add()で要素を追加すると上記のExceptionになるそうです。</p>
<p>asListのJavadocでの記載は</p>
<blockquote>
<p>指定された配列を基にする固定サイズのリストを返します。返されたリストへの変更は、そのまま配列に書き込まれます。(後は省略)</p>
</blockquote>
<p>なるほど。。。</p>
<p>とりあえず深く考えずに下記のように書き換えて回避しました。</p>
<pre class="brush: java;">
String[] array = {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;};

List&lt;String&gt; list = new ArrayList&lt;String&gt;();

list.addAll(Arrays.asList(array)); 

list.add(&quot;d&quot;);
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/java-unsupportedoperationexception-when-manipulate-java-list/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: Mapをnewした時に値を入れて初期化するコード</title>
		<link>http://www.kinopyo.com/blog/java-init-map-with-data</link>
		<comments>http://www.kinopyo.com/blog/java-init-map-with-data#comments</comments>
		<pubDate>Wed, 31 Mar 2010 10:20:44 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1061</guid>
		<description><![CDATA[
表題の通り、Mapをnewしたときに値を入れて
初期化するコード方法です。

Map&#60;String, Integer&#62; map = new HashMap&#60;String, Integer&#62;() {
    {
        put(&#34;one&#34;, 1);
    }
};


]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>表題の通り、Mapをnewしたときに値を入れて</p>
<p>初期化するコード方法です。</p>
<pre class="brush: java;">
Map&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;() {
    {
        put(&quot;one&quot;, 1);
    }
};
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/java-init-map-with-data/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 3/36 queries in 0.102 seconds using disk: basic
Object Caching 513/563 objects using disk: basic

Served from: www.kinopyo.com @ 2012-01-14 17:07:53 -->
