|
|
ToDo:
|
|
午前中はヘタっていました。
CREATE TABLE `test`.`Skill` (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`ID`)
)
ENGINE = InnoDB;
CREATE TABLE `test`.`Emp_Skill` (
`EmpID` INTEGER UNSIGNED NOT NULL,
`SkillID` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`EmpID`, `SkillID`),
CONSTRAINT `FK_Emp_Skill_1` FOREIGN KEY `FK_Emp_Skill_1` (`EmpID`)
REFERENCES `employee` (`ID`)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
CONSTRAINT `FK_Emp_Skill_2` FOREIGN KEY `FK_Emp_Skill_2` (`SkillID`)
REFERENCES `skill` (`ID`)
ON DELETE RESTRICT
ON UPDATE RESTRICT
)
A5サイズで6万円弱。いいなぁ。
package org.hikazoh;
import java.io.Serializable;
import javax.persistence.*;
import java.util.*;
@Entity
@Table(name="Employee")
@NamedQuery(name="org.hikazoh.Employee",query="from org.hikazoh.Employee where lastName =:lastname")
public class Employee implements Serializable {
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer iD;
@Column(name="FirstName")
private String firstName;
@Column(name="LastName")
private String lastName;
@ManyToOne(targetEntity=Department.class)
@JoinColumn(name="departmentID",referencedColumnName="ID")
private Department department;
@ManyToMany(targetEntity=Skill.class)
@JoinTable(name="Emp_Skill",
joinColumns={@JoinColumn(name="EmpID")},
inverseJoinColumns={@JoinColumn(name="SkillID")})
private Set skills;
public Integer getID() {
return iD;
}
public void setID(Integer id) {
iD = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Set getSkills() {
return skills;
}
public void setSkills(Set skills) {
this.skills = skills;
}
}
スキル
package org.hikazoh;
import java.io.Serializable;
import javax.persistence.*;
import java.util.*;
@Entity
@Table(name="Skill")
public class Skill implements Serializable {
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer Id;
@Column(name="NAME")
private String Name;
@ManyToMany(targetEntity=Employee.class)
@JoinTable(name="Emp_Skill",
joinColumns={@JoinColumn(name="SkillID")},
inverseJoinColumns={@JoinColumn(name="EmpID")})
private Set employees;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public Set getEmployees() {
return employees;
}
public void setEmployees(Set employees) {
this.employees = employees;
}
public Integer getId() {
return Id;
}
}
エントリーサンプル(関連テーブルに関しては、双方向だからかな?どっちかのSetに入れておけばちゃんとINSERTしてくれました)
package org.hikazoh;
import java.util.*;
import org.hibernate.*;
import org.hibernate.cfg.AnnotationConfiguration;
public class ManyToManyTest {
public static void main(String[] args) {
SessionFactory sessionFactory =
new AnnotationConfiguration()
.addPackage("org.hikazoh")
.addAnnotatedClass(Skill.class)
.addAnnotatedClass(Employee.class)
.addAnnotatedClass(Department.class)
.buildSessionFactory();
Transaction tx = null;
Session session = sessionFactory.openSession();
try{
tx = session.beginTransaction();
Department dept = new Department();
dept.setName("Sales");
session.save(dept);
Employee emp = new Employee();
emp.setFirstName("Hika");
emp.setLastName("Zou");
emp.setDepartment(dept);
Skill skill = new Skill();
skill.setName("ServerManagement");
session.save(emp);
Set emps = new HashSet();
emps.add(emp);
skill.setEmployees(emps);
session.save(skill);
tx.commit();
}catch(Exception e){
e.printStackTrace();
System.out.println("[" + e.getLocalizedMessage() + "]" );
if ( tx != null ){
tx.rollback();
}
}finally{
session.close();
}
sessionFactory.close();
}
}

上下巻を本日読了。タブンいま訳しなおすと4日間の濃密な日々はカナーリ官能な表現になりそう。内容的には好きな作品です。村上春樹の源流を辿ったような気がします。
GmailとRemember the Milkのコラボです。流石にこれはインストールしました。
また、こーやってリッチクライアントのデファクトを狙っているのか。
AIRもあるけど、もうちょっと様子見ですなぁ。Silverlightは勉強しておいても良いかもね。

うーん、どうなんだろうか?うちのザウルス君は完全にお亡くなりになっており、ちょっと不便ではあるんですよねぇ。
仕事場で強制的にOutlookなんで、コレを投入しよう。
Zepから始まって、YouTubeで好きなミュージシャンのLiveを漁っていて寝不足。
MITの授業らしい。こーいった内容がYouTubeで見られるのは嬉しいです。
viaMIT「熱血物理学教授」の講義ビデオが大人気こーいった教授が居るMITってやっぱいいなぁ。
ちょっと話題。あとで調べる。
以前、LaTeXからPDFで報告書作ったことあるなぁ。
ちょっと涙モノなヴィデオ。あの頃のFleetwood macのLiveを見たかったです。
Bill Clinton(旦那のほうね)が大統領選挙で、Don't Stopをテーマソングにしたのを記念したLive。
去年一番のHeavyRotationした曲
Liveもあります。HardRockCafeで見たのもLiveだったが、これではなかったです。
ちょーど、キブン萎え萎えで関係各所に悪影響を与えているのは認識しているのですが…ってな状況にこのエントリー(凄い人気ですね)を見つけてしまった。気分が後ろ向きな時にコレよむと黒いココロが先に出て、どーにも前向きにならんヲレってダメダメ。
風邪が酷くってダウソ。
体調戻らず。引き篭もり状態。
5cmほど髪を切りました。1000YEN Cutです。美容室なんて勿体無い。
package org.hikazoh;
import java.io.Serializable;
import javax.persistence.*;
import java.util.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.FilterJoinTable;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.annotations.NotFoundAction;
import org.hibernate.annotations.Where;
import org.hibernate.annotations.WhereJoinTable;
@Entity
@Table(name="Employee")
@NamedQuery(name="org.hikazoh.Employee",query="from org.hikazoh.Employee emp where emp.lastName like :lastname")
public class Employee implements Serializable {
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer iD;
@Column(name="FirstName")
private String firstName;
@Column(name="LastName")
private String lastName;
@ManyToOne(targetEntity=Department.class)
@JoinColumn(name="departmentID",referencedColumnName="ID")
private Department department;
@ManyToMany(targetEntity=Skill.class)
@org.hibernate.annotations.Fetch(org.hibernate.annotations.FetchMode.JOIN)
@JoinTable(name="Emp_Skill",
joinColumns={@JoinColumn(name="EmpID")},
inverseJoinColumns={@JoinColumn(name="SkillID")})
private Set skills;
public Integer getID() {
return iD;
}
public void setID(Integer id) {
iD = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Set getSkills() {
return skills;
}
public void setSkills(Set skills) {
this.skills = skills;
}
}
@Fetchを入れておいて、Joinさせることがミソ?だけど外部結合になっちゃいますけど。Criteriaで条件を無理矢理指定。
package org.hikazoh;
import org.hibernate.*;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.criterion.Expression;
import java.util.*;
public class SimpleCriteria {
public static void main(String[] args) {
SessionFactory sessionFactory =
new AnnotationConfiguration()
.addPackage("org.hikazoh")
.addAnnotatedClass(Department.class)
.addAnnotatedClass(Employee.class)
.addAnnotatedClass(Skill.class)
.buildSessionFactory();
Transaction tx = null;
Session session = sessionFactory.openSession();
try{
tx = session.beginTransaction();
List emps = (List)session.createCriteria(Employee.class)
.add(Expression.sql("skillid is not null")).list();
for(Employee emp : emps){
System.out.println("[first name]=" + emp.getFirstName());
for(Skill skill : emp.getSkills()){
System.out.println("[Skill Name]=" + skill.getName());
}
}
}catch(Exception e){
e.printStackTrace();
System.out.println("[" + e.getLocalizedMessage() + "]");
}finally{
session.close();
}
sessionFactory.close();
}
}
半Qして、久しぶりな病院へごーごー。
そっこーでインストールしてみました。なんかよさげ。
こっちで失敗したDVDなんかも焼いてみたい。
ちょっと注目に値しそうなFrameworkだ。 Wicket入門 - JavaとHTMLだけで作るWebアプリケーションやウェブ・アプリケーションの革命がここにある - Apache Wicketユーザーグループを始めますからフォローして行きたい。
うーん、大変よさげであります。Hibernateのお勉強もさることながら、Strutsなんかよりもヨサゲであります。
ちょっと高いと思います。注目の5万円ノート「Eee PC」日本語版を詳細レビュー——SSDで軽快動作、日本語キーも問題なしとは言いながら、米の国では199$で売っていたりします。なんか日本ってナメられてないか?
Macは下取り買い替えを画策しておりますが、AirはやめてふつーMacBookにしようかと。
ふつーbootしたが、あまりに寒くって2℃寝。
本当に実用化されたら、その時点で若いヒトは飛びつくかもしれん。
その時点で既にエンディングが見えているようなヒトはどうなんじゃろうか?100歳を過ぎた状態であと700年って。ヒトとして生きるのと生物として生きるの違いかの。
世の中わからないことは沢山あるですよ。
珍しくTVを見ていました。世界不思議発見で、ネス湖の話でした。ちょうど17だっけ18年だっけ前にネッシー釣りに行くってので行きましたよ。あの遊覧船にも乗りました。ウルクハート城も覚えております。視聴者プレゼントのネッシーの置物やヌイグルミもまだあります(あるはず)。ってところで、そこで出ていたLive Cam(いま重くってみられませんね:-p)
これ練習してうまくなるまでが大変そう。そう簡単には出来そうもない。
ってなところで、これは凄いです。
Tracやるやるって言ってやってない。Wicketやるのが現在の一番のタスク。
なんかどこかでメモっていたはずだったのだが…日記を探してもみつからなーい。
あとで参考にします。特に3Gスイッチなど。
coLinux最近はサッパリです。そろそろかのぉ。
いや、出すならダスで早めに言ってくれ。購買に出したばかりぢゃないかー。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace DeleteCache
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string dbCash = "C:\\Documents and Settings\\hikazoh\\Local Settings\\Application Data\\IconCache.db";
private string gdiCash = "C:\\Documents and Settings\\hikazoh\\Local Settings\\Application Data\\GDIPFONTCACHEV1.DAT";
private string fusionCash = "C:\\Documents and Settings\\hikazoh\\Local Settings\\Application Data\\fusioncache.dat";
private string tempDir = "C:\\Documents and Settings\\hikazoh\\Local Settings\\Temp";
private string fntCash = "C:\\WINDOWS\\system32\\FNTCACHE.DAT";
private void button1_Click(object sender, EventArgs e)
{
if (File.Exists(this.dbCash))
{
try
{
File.Delete(this.dbCash);
}
catch (Exception exp)
{
MessageBox.Show("IconCache Delete Failre:" + exp.Message);
}
}
if (File.Exists(this.fntCash))
{
try
{
File.Delete(this.fntCash);
}
catch (Exception exp)
{
MessageBox.Show("FontCache Delete Failre:" + exp.Message);
}
}
if (File.Exists(this.gdiCash))
{
try
{
File.Delete(this.gdiCash);
}
catch (Exception exp)
{
MessageBox.Show("GdiCache Delete Failre:" + exp.Message);
}
}
if (File.Exists(this.fusionCash))
{
try
{
File.Delete(this.fusionCash);
}
catch (Exception exp)
{
MessageBox.Show("FusionCache Delete Failre:" + exp.Message);
}
}
foreach (string dirs in Directory.GetDirectories(this.tempDir))
{
if (Directory.Exists(dirs))
{
try
{
Directory.Delete(dirs);
}
catch (Exception exp)
{
MessageBox.Show("FusionCache Delete Failre:" + exp.Message);
}
}
}
foreach (string files in Directory.GetFiles(this.tempDir))
{
if (File.Exists(files))
{
try
{
File.Delete(files);
}
catch (Exception exp)
{
MessageBox.Show("FusionCache Delete Failre:" + exp.Message);
}
}
}
MessageBox.Show("Delete Complete");
}
}
}
あー、これはなかなかEかも。読者を限定させたいときの認証としてヨサゲ。
これはヨサゲではあります。ちょっと高いなぁ…でも美味しいモノは高い場合が多いですなぁ。
設計書なんかの文章管理によさげ。
MacBookAirがアマゾンで予約可能になりました。
さて、今年も返してもらおうか。
ひかぞーの自転車練習に明け暮れた。もうちょっとで出来そうかな?
生きるために仕方ない勉強ってのもあり。
今年始めに某所から無事(?)帰還した某氏に向けて。

MacBookAirにはどうしてもできませんでした。
_ zpoowin [http://www.zimbio.com/Loans/articles/0oGquJUjTaQ/EASY+ONLI..]
_ ojbthpm [http://www.zimbio.com/Loans/articles/0oGquJUjTaQ/EASY+ONLI..]