<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>千里冰封</title>
    <description>尽管千里冰封
依然拥有晴空</description>
    <link>http://hadeslee.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>JAVA音乐播放器YOYOPlayer1.1.2发布</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/179364" style="color:red;">http://hadeslee.javaeye.com/blog/179364</a>&nbsp;
          发表时间: 2008年04月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.1.2更新[2008-04-03]<br />1,更改了精品网页的歌词搜索部分,因为精品网页的内容发生了改变,如果不更改对应的搜索方式的话<br />将不能从精品网页上查询到歌词,无论怎么样,都对精品网页表示感谢,它的网址是:http://www.jpwy.net/gc<br />2,修正了程序在某些LINUX版本上的系统上打开会抛出异常而影响程序使用的BUG.<br />3,在歌词秀窗口去掉了作者的名字:),此前的不便,望各位用户原谅.<br />4,在使用过程中,有任何的建议,可以加作者的QQ:24325142,注明yoyoplayer,或者<br />登录http://www.blogjava.net/hadeslee上留言,此博客为作者的博客,再此感谢大家对yoyoplayer的支持.<br />====================================================================================<br /><br />    YOYOPlayer1.0版推出之后,得到了一些朋友的认可和反馈,经过这段时间的修改,现在推出YOYOPlayer1.1版.相对于1.0版,改进的地方如下:<br />一,设置方面<br />1,增加了首选项的功能,很多方面现在已经可以配置<br />二,歌词方面<br />1,增加了歌词搜索的自主性,用户可以选择自定义搜索关键字,也可以自定义是否和歌词文件相关联,这里的关联并不是把歌词写入歌曲文件,而是在程序中建立一种关联,以免每次播放这首歌的时候都去搜索歌词,而是直接去读取关联好的歌词文件.<br />2,增加了指定歌词的搜索目录,指定歌词的保存目录功能.为了性能考虑,歌词的搜索目录不会往下递归,只搜索设置的那一级目录.<br />3,歌词的设置更为丰富,很多地方以前是固定的,现在都是可以改变的,并且增加了纵向显示歌词的卡拉OK显示功能,还支持字体是否抗锯齿显示的选项.<br />4,支持淡入淡出显示歌词,支持多种对齐方式.<br />5,在windows下面支持歌词窗口的透明显示.在linux下面,此选项将被禁用:(<br />三,标签方面<br />1,现在完全支持ID3v1,ID3v2,APEv2,Vorbis标签的读取和写入,并可设置标签的读取和写入的编码.以免在读取标签的时候出现乱码的情况.程序的默认设置编码是GBK,如果是UTF-8的用户,可以在首选项修改.<br />四,其它方面<br />1,可以选择音频设备,这在一定程度上可以选择几个设置对比一下效果.尽量减少播放器没有声音的情况.<br />2,增加在任务栏滚动显示歌曲标题.<br />3,支持设置代理服务器连接网络.<br />4,支持对播放列表进行一些细化的设置,因为程序预设的颜色不一定符合大家的审美观.<br />5,配置目录现在改为{user.home}/.YOYOPlayer/,默认的歌词目录是{user.home}/.YOYOPlayer/Lyrics/<br />6,快捷键:C:播放,V:停止,B:下一首,空格:暂停,F2:显示/隐藏歌词秀,F3:显示/隐藏EQ窗口,F4:显示/隐藏播放列表<br />7,在一定程度上实现了窗口的吸附的功能,虽然不是很完美,还望各位有什么好的想法一起分享:)<br />在首选项里在的还有很多功能没有实现,因为个人的精力实在有限,YOYOPlayer项目已经在sourceforge.net上申请项目,已获通过,要查看源码的,请到http://sourceforge.net/projects/yoyoplayer上查看.<br />最后,谢谢我的女友YOYO这段时间以来以我的关心和鼓励.<br /><br />sourforge.net上的下载地址如下:<br />http://nchc.dl.sourceforge.net/sourceforge/yoyoplayer/YOYOPlayer1.1.2.zip
          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/179364#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Apr 2008 19:25:07 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/179364</link>
        <guid>http://hadeslee.javaeye.com/blog/179364</guid>
      </item>
      <item>
        <title>YOYOPlayer通过了审核,成为了sf上的一个项目</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/156947" style="color:red;">http://hadeslee.javaeye.com/blog/156947</a>&nbsp;
          发表时间: 2008年01月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前几天通过了,于是把代码通过svn上传到了sf的项目下,大家可以通过如下网址访问yoyoplayer的项目:<br />http://sourceforge.net/projects/yoyoplayer<br /><br />SVN的地址是:https://yoyoplayer.svn.sourceforge.net/svnroot/yoyoplayer<br /><br />大家可以通过subversion签出代码,也可以在项目页下面下载代码,也欢迎大家参与到项目中来.有需要参与的朋友请留下你们在sf上面的ID,以及自己要做的方面.
          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/156947#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jan 2008 16:45:29 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/156947</link>
        <guid>http://hadeslee.javaeye.com/blog/156947</guid>
      </item>
      <item>
        <title>JAVA音乐播放器YOYOPlayer1.1发布</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/151962" style="color:red;">http://hadeslee.javaeye.com/blog/151962</a>&nbsp;
          发表时间: 2007年12月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          YOYOPlayer1.0版推出之后,得到了一些朋友的认可和反馈,经过这段时间的修改,现在推出YOYOPlayer1.1版.相对于1.0版,改进的地方如下:<br /><span style="color: red">一,设置方面</span><br />1,增加了首选项的功能,很多方面现在已经可以配置<br /><span style="color: red">二,歌词方面</span><br />1,增加了歌词搜索的自主性,用户可以选择自定义搜索关键字,也可以自定义是否和歌词文件相关联,这里的关联并不是把歌词写入歌曲文件,而是在程序中建立一种关联,以免每次播放这首歌的时候都去搜索歌词,而是直接去读取关联好的歌词文件.<br />2,增加了指定歌词的搜索目录,指定歌词的保存目录功能.为了性能考虑,歌词的搜索目录不会往下递归,只搜索设置的那一级目录.<br />3,歌词的设置更为丰富,很多地方以前是固定的,现在都是可以改变的,并且增加了纵向显示歌词的卡拉OK显示功能,还支持字体是否抗锯齿显示的选项.<br />4,支持淡入淡出显示歌词,支持多种对齐方式.<br />5,在windows下面支持歌词窗口的透明显示.在linux下面,此选项将被禁用:(<br /><span style="color: red">三,标签方面</span><br />1,现在完全支持ID3v1,ID3v2,APEv2,Vorbis标签的读取和写入,并可设置标签的读取和写入的编码.以免在读取标签的时候出现乱码的情况.程序的默认设置编码是GBK,如果是UTF-8的用户,可以在首选项修改.<br /><span style="color: red">四,其它方面</span><br />1,可以选择音频设备,这在一定程度上可以选择几个设置对比一下效果.尽量减少播放器没有声音的情况.<br />2,增加在任务栏滚动显示歌曲标题.<br />3,支持设置代理服务器连接网络.<br />4,支持对播放列表进行一些细化的设置,因为程序预设的颜色不一定符合大家的审美观.<br />5,配置目录现在改为{user.home}/.YOYOPlayer/,默认的歌词目录是{user.home}/.YOYOPlayer/Lyrics/<br />6,支持snd,aifc,aif,wav,au,mp1,mp2,mp3,ogg,spx,flac,ape,mac等音频格式音乐.<br /><br />在首选项里在的还有很多功能没有实现,因为个人的精力实在有限,YOYOPlayer项目已经在sourceforge.net和java.net申请了项目,正在审核中,等审核通过了,欢迎大家加入到开发和维护YOYOPlayer的行列中.在java.net上的地址是:<br />https://yoyoplayer.dev.java.net<br /><br />在使用的过程中,有任何问题,欢迎到http://www.blogjava.net/hadeslee或者http://www.luge.cn/bbs/上留言.也可以加本人的QQ:24325142.希望和大家一起探讨JAVA问题,让JAVA的浓香飘的更远.<br /><br />其实本人也希望打包成ZIP格式,可是ZIP的压缩率没有RAR高,并且blogjava只支持2000KB的文件,所以只能打包成RAR格式的,还望大家见谅.最后,<span style="color: blue">谢谢我的女友YOYO这段时间以来以我的关心和鼓励.</span><br /><br />下面是运行的截图:<br /><img src="http://www.blogjava.net/images/blogjava_net/hadeslee/yoyoplayer1.1.jpg" /><br /><br />请<a href="http://www.blogjava.net/Files/hadeslee/YOYOPlayer1.1.rar" target="_blank">点击这里</a>下载可执行的文件
          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/151962#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 30 Dec 2007 13:55:50 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/151962</link>
        <guid>http://hadeslee.javaeye.com/blog/151962</guid>
      </item>
      <item>
        <title>JAVA6.0操作脚本语言</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125366" style="color:red;">http://hadeslee.javaeye.com/blog/125366</a>&nbsp;
          发表时间: 2007年09月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JDK6.0里面加了一个很实用的包,javax.script,它是JAVA新增的操作脚本的包,利用它我们可以对脚本语言进行操作,比如修改,或者调用,并且可以和JAVA语言交互,如果我们利用好的话,我们利用它来实现一些经常要改的部份,这样我们就可以把一些算法写到js文件里面,然后再在运行的时候读取出来并执行,这样就省去了更改一些东西需要重新编译的过程了.<br />
<br />
下面我们就来看一个例子吧,看看如何在JAVA代码里面操作脚本并调用里面的方法.<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Test.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-19,&nbsp;15:28:49<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.script;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.FileReader;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.script.Bindings;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.script.Invocable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.script.ScriptContext;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.script.ScriptEngine;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.script.ScriptEngineManager;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.swing.JFrame;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">根据js的后缀名生成一个解析JS的脚本解析引擎</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScriptEngine&nbsp;engin</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ScriptEngineManager().getEngineByExtension(</span><span style="color: #000000">"</span><span style="color: #000000">js</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">查询一下这个引擎是否实现了下面很实用的接口</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(engin&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;Invocable);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">声明两个对象,传入到JS里面去</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFrame&nbsp;jf</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JFrame(</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到挷定的键值对象,把当前的两个JAVA对象放进去</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bindings&nbsp;bind</span><span style="color: #000000">=</span><span style="color: #000000">engin.createBindings();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind.put(</span><span style="color: #000000">"</span><span style="color: #000000">jf</span><span style="color: #000000">"</span><span style="color: #000000">,jf);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind.put(</span><span style="color: #000000">"</span><span style="color: #000000">list</span><span style="color: #000000">"</span><span style="color: #000000">,list);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">把挷下的键值对象放进去,作用域是当前引擎的范围&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;engin.setBindings(bind,&nbsp;ScriptContext.ENGINE_SCOPE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">用引擎执行一段写在JS文件里面的代码</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj</span><span style="color: #000000">=</span><span style="color: #000000">engin.eval(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileReader(</span><span style="color: #000000">"</span><span style="color: #000000">test.js</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这个时候返回值当然&nbsp;是null了</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">把当前的引擎强制转为Invocable,这样就可以调用定义在JS文件里面的一个一个函数了</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invocable&nbsp;in</span><span style="color: #000000">=</span><span style="color: #000000">(Invocable)engin;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到了从JS里面返回来的对象</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;l</span><span style="color: #000000">=</span><span style="color: #000000">(List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">)in.invokeFunction(</span><span style="color: #000000">"</span><span style="color: #000000">getNames</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用一下定义在JS里面的另一个函数</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.invokeFunction(</span><span style="color: #000000">"</span><span style="color: #000000">testJS</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">最后调用一个函数,该函数可以使我们前面定义的窗体显示出来</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.invokeFunction(</span><span style="color: #000000">"</span><span style="color: #000000">doSth</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
下面是定义在test.js里面的内容<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;doSth(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jf.setSize(</span><span style="color: #000000">500</span><span style="color: #000000">,</span><span style="color: #000000">300</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jf.setVisible(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getNames(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #000000">"</span><span style="color: #000000">doSth</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #000000">"</span><span style="color: #000000">getNames</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;list;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;testJS(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print('Hello&nbsp;world</span><span style="color: #000000">!</span><span style="color: #000000">');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span></div>
<br />
我们可以看到,在JAVA运行了以后,窗体会显示出来,并且我们可以接收到从JS解析引擎里面传回的数据,当然我们也可以调用一个很普通的JS函数,想象一下,如果我们把我们程序运行时的一些对象都设到Bindings里面去,那么我们JS岂不是有很大的自由度了吗?因为JS里面也可以操作我们的JAVA对象了,并且我们可以像JAVA编程一样的对JS编程了,还不用再编译,马上就可以运行.灵活性岂不是变得更高了吗?<br />
<br />
过几天写一个利用JAVA解析JS提高编程灵活性的例子,以体现一下这个包的用处,不过,JS的缺点就是执行速度慢,比起JAVA代码那是慢多了,但是一些初始化的事情,或者一些设置的事情,我们就不用写死在程序里面了,就可以从我们定义的JS文件里面读取了,毕竟那些只执行一次的方法牺牲一点效率换来很高的灵活度是很值得的.<br />
  
          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125366#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Sep 2007 16:19:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125366</link>
        <guid>http://hadeslee.javaeye.com/blog/125366</guid>
      </item>
      <item>
        <title>EJB学习日记(10)</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125367" style="color:red;">http://hadeslee.javaeye.com/blog/125367</a>&nbsp;
          发表时间: 2007年09月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          实体BEAN的七种关系之---------一对多单向<br />
&nbsp;One-to-Many Unidirectional Relationship<br />
<br />
一对多单向最典型的应用莫过于人和电话的关系了,我们一个人可以有很多个电话,有时候还经常会换号码,我们可以既有小灵通也有手机,家里还有固定电话,这就是很典型的一对多关系,为什么要是单向的呢,因为电话的易变性,这个号码可能今天是你的,明天就可能是别人的了,并且现在买手机号码是不需要身份证的,所以从电话号码是不可能查到你的身份证了.并且电话号码也不应该和人绑定,一般我们都是问别人电话是多少,却比较少去问一个号码是谁的(这种情况也有,就是你收到陌生人的电话或短信的时候).那我们还是先看代码吧.<br />
<br />
首先我们还是先要定义一个人的实体类<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Person.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-15,&nbsp;0:11:58<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.entitybean.test1;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.CascadeType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Id;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.JoinColumn;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToMany;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToOne;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Admin<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
@Entity<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;IDCard&nbsp;idCard;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Address&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToOne(cascade</span><span style="color: #000000">=</span><span style="color: #000000">CascadeType.ALL,optional</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Address&nbsp;getAddress()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAddress(Address&nbsp;address)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToMany(cascade</span><span style="color: #000000">=</span><span style="color: #000000">CascadeType.ALL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@JoinColumn(name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">personID</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Phone</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;getPhones()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;phones;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPhones(List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Phone</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;phones)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.phones&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;phones;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Phone</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;phones;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getAge()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getSex()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSex(String&nbsp;sex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.sex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToOne(cascade</span><span style="color: #000000">=</span><span style="color: #000000">{CascadeType.ALL})<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;IDCard&nbsp;getIdCard()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;idCard;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setIdCard(IDCard&nbsp;iDCard)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.idCard&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;iDCard;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
}<br />
</span></div>
<br />
<br />
然后是电话的实体类<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Phone.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-18,&nbsp;17:23:28<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.entitybean.test1;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.CascadeType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Id;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.ManyToOne;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
@Entity<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Phone&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;phoneNumber;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getPhoneNumber()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;phoneNumber;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPhoneNumber(String&nbsp;phoneNumber)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.phoneNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;phoneNumber;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
我们可以在Person类里面发现如下注释<br />
<br />
<span style="color: red">&nbsp;@OneToMany(cascade=CascadeType.ALL)<br />
&nbsp;&nbsp;&nbsp; @JoinColumn(name="personID")<br />
<span style="color: #000000">&nbsp;&nbsp;&nbsp; public List&lt;Phone&gt; getPhones() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return phones;<br />
&nbsp;&nbsp;&nbsp; }</span></span><br />
<br />
它代表是一对多,一是指类本身,多是指这个成员,也就是一个类可以对应多个成员.<br />
在一对多里面,无论是单向还是双向,映射关系的维护端都是在多的那一方,也就是Phone那里,因为要在数据库面表现的话,也只有让Phone起一个指向Person的外键,不可能在Person里面指向Phone,这一点和一对一不一样,一对一可以在任意一方起一个外键指向对方.可是一对多却不行了.在这里@JoinColumn这个注释指的却是在Phone里面的外键的列的名字,它并不像在一对一里面的注释指的是自己表里面的外键列名.这一点要特别注意一下.<br />
如果是一对多的双向关系,那么这个注释就要应用到多的那边去了,虽然注释还在Person类里面,但是它起的效果却是在Phone里面起一个叫personID的外键, 因为多的那边要有外键指向少的这边.<br />
<br />
如果你不加&nbsp;&nbsp;&nbsp; @JoinColumn(name="personID")这个注释的话,那么JBOSS就会自动帮你生成一张中间表,它负现Person和Phone表之间的联系.它将会做如下事情:<br />
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;PERSON_PHONE<br />
(<br />
&nbsp;&nbsp;&nbsp;&nbsp;PERSON_id&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">,<br />
&nbsp;PHONE_id&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000"><br />
);<br />
</span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;PERSON_PHONE </span><span style="color: #0000ff">ADD</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000">&nbsp;person_phone_unique<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">UNIQUE</span><span style="color: #000000">&nbsp;(PHONE_id);<br />
<br />
</span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;PERSON_PHONE </span><span style="color: #0000ff">ADD</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000">&nbsp;personREFphone<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FOREIGN</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">&nbsp;(PERSON_id)&nbsp;</span><span style="color: #0000ff">REFERENCES</span><span style="color: #000000">&nbsp;PERSON&nbsp;(id);<br />
<br />
</span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;PERSON_PHONE </span><span style="color: #0000ff">ADD</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000">&nbsp;personREFphone2<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FOREIGN</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">&nbsp;(PHONE_id)&nbsp;</span><span style="color: #0000ff">REFERENCES</span><span style="color: #000000">&nbsp;PHONE&nbsp;(id);<br />
<br />
</span></div>
</pre>
所以我们最好还是指定一下,在Phone里面生成一个外键指向Person,看起来更好一些.<br />
<br />

          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125367#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Sep 2007 11:06:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125367</link>
        <guid>http://hadeslee.javaeye.com/blog/125367</guid>
      </item>
      <item>
        <title>EJB学习日记(9)</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125368" style="color:red;">http://hadeslee.javaeye.com/blog/125368</a>&nbsp;
          发表时间: 2007年09月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>实体BEAN的七种关系之---------一对一双向<br />
One-to-One Bidirectional Relationship<br />
<br />
一对一双向的情况其实在现实生活中也是挺常见的,最常见的就是人和身份证的关系了,我们每个人都有一个身份证(只要你年满16岁,并且申请了),并且每个身份证都对应一个人,我们可以根据一个人查到他的身份证号码,也可以根据一个身份证号码查到一个人的具体情况,(第一代身份证重码的情况还是有的:(&nbsp;&nbsp; ) .好了,闲话不多说,还是看看代码吧.<br />
<br />
先定义一个Person类<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Person.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-15,&nbsp;0:11:58<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.entitybean.test1;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.CascadeType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Id;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToMany;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToOne;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Admin<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
@Entity<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;IDCard&nbsp;idCard;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Address&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToOne(cascade</span><span style="color: #000000">=</span><span style="color: #000000">CascadeType.ALL,optional</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Address&nbsp;getAddress()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAddress(Address&nbsp;address)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getAge()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getSex()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSex(String&nbsp;sex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.sex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToOne(cascade</span><span style="color: #000000">=</span><span style="color: #000000">{CascadeType.ALL},optional</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;IDCard&nbsp;getIdCard()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;idCard;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setIdCard(IDCard&nbsp;iDCard)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.idCard&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;iDCard;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
}<br />
</span></div>
<br />
<br />
IDCard类<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;IDCard.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-18,&nbsp;17:05:51<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.entitybean.test1;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.CascadeType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Id;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToOne;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
@Entity<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;IDCard&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Person&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;cardNumber;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getCardNumber()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;cardNumber;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setCardNumber(String&nbsp;cardNumber)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.cardNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cardNumber;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToOne(cascade</span><span style="color: #000000">=</span><span style="color: #000000">CascadeType.ALL,mappedBy</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">idCard</span><span style="color: #000000">"</span><span style="color: #000000">,optional</span><span style="color: #000000">=</span><span style="color: #0000ff">false</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Person&nbsp;getPerson()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPerson(Person&nbsp;person)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.person&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
}<br />
</span></div>
<br />
在这里我们可以看到一对一单向和一对一双向其实差别也不是很大,无非就是在对方的类里面也定义了一个自己,这样就互相都能找到对方了,在数据表的表现来看,和一对一单向是一模一样的,都是从Person表里面起一个外键连到IDCard的主键.但是只有这种方法吗?<br />
<br />
在Person类里面,定义的IDCard注释是和Address一样的,可是我们在IDCard里面定义的注释却和Person里面的不一样:<br />
<br />
@OneToOne(cascade=CascadeType.ALL,<span style="color: red">mappedBy="idCard",</span>optional=false)<br />
&nbsp;&nbsp;&nbsp; public Person getPerson() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return person;<br />
&nbsp;&nbsp;&nbsp; }<br />
多了一个mappedBy这个方法,它表示什么呢?它表示此表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的,这一点很重要.<br />
<br />
我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让&nbsp;Person来维护整个关系,这样更符合我们正常的思维. <br />
<br />
我们也可以看到在Person里面IDCard是注释是optional=true,也就是说一个人是可以没有身份证的,但是一个身份证不可以没有人,所以在IDCard里面注释person的时候,optional就为false了,这样就可以防止一个空的身份证记录进数据库.<br />

          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125368#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Sep 2007 10:50:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125368</link>
        <guid>http://hadeslee.javaeye.com/blog/125368</guid>
      </item>
      <item>
        <title>EJB学习日记(8)</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125369" style="color:red;">http://hadeslee.javaeye.com/blog/125369</a>&nbsp;
          发表时间: 2007年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>实体BEAN的七种关系之---------一对一单向<br />
<br />
一对一单向,顾名思义,就是只要求从A方到达B方,而不需要从B方到达A方,典型的例子就是,一个人对应一个地址,因为现实生活中,一个地址可能住很多人,所以一般我们只需要根据人查到它的地址,而不太会需要从一个地址去查谁住在那里,不过,真的有这种需求的话,我们就要以用另外一种关系来实现了,这个以后再讲<br />
<br />
首先我们声明一个人的实体类,Person<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Person.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-15,&nbsp;0:11:58<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.entitybean.test1;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.CascadeType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Id;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToMany;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.OneToOne;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Admin<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
@Entity<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Address&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToOne(cascade</span><span style="color: #000000">=</span><span style="color: #000000">CascadeType.ALL,optional</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Address&nbsp;getAddress()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAddress(Address&nbsp;address)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;address;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getAge()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getSex()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSex(String&nbsp;sex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.sex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
再来看看Address的实体BEAN定义<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Address.java<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2007-9-15,&nbsp;0:13:50<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;lbf.entitybean.test1;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.persistence.Id;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Admin<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
@Entity<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Address&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;country,province,city,street;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;postcode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getCity()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;city;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setCity(String&nbsp;city)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.city&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;city;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getCountry()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;country;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setCountry(String&nbsp;country)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.country&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;country;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getPostcode()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;postcode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPostcode(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;postcode)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.postcode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;postcode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getStreet()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;street;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setStreet(String&nbsp;street)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.street&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;street;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
以上便是两个类的定义,从Person里面我们可以看到如下的代码<br />
<br />
<span style="color: red">@OneToOne(cascade=CascadeType.ALL,optional=true)</span><br />
&nbsp;&nbsp;&nbsp; public Address getAddress() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return address;<br />
&nbsp;&nbsp;&nbsp; }<br />
在这里的@OneToOne就是注释是一对一的关系,其中cascade是表示级联的关系,是级联删除还是级联更新,还是所有,我们这里选择的是所有,这样的好处就是,我们在插入Person的时候,就顺带的把Person里面包含的Address一起插入数据库里面,当我们删除Person的时候,也是把这个Person对应的Address从数据库里面删除,否则就需要我们人工的删除两遍或者插入两遍等等,optional表示这个成员是不是可选的,我们这里是可选的,也就是说一个人可以没有地址(比如流浪汉:)).<br />
然后我们发现,在Address里面只有一些简单的EntityBean的注释,并没有表示关系的注释,这是因为本例是一对一单向的实现,Person里面有&nbsp;Address,而Address却什么都不知道,它对应到数据库里面只是一张简单的表而已,Person对应到数据库里面就有一个指向Address的外键.我们也可以增加注释指定外键的列的名字,如下:<br />
@OneToOne(cascade=CascadeType.ALL,optional=true)<br />
<span style="color: red">@JoinColumn(name="addressID")</span><br />
&nbsp;&nbsp;&nbsp; public Address getAddress() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return address;<br />
&nbsp;&nbsp;&nbsp; }<br />
如果我们不加的话,也是可以通过的,在JBOSS里面,它会自动帮你生成你指向这个类的类名加上下划线再加上id的列,也就是默认列名是:address_id.<br />
<br />
如果是主键相关联的话,那么可以运用如下注释<br />
<br />
<span class="docEmphStrong">@OneToOne(cascade={CascadeType.ALL})<br />
<span style="color: red">&nbsp;&nbsp; @PrimaryKeyJoinColumn</span><br />
</span><br />
&nbsp;&nbsp; public Address getAddress( ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return homeAddress;<br />
&nbsp;&nbsp; }<br />
它表示两张表的关联是根据两张表的主键的<br />
<br />
以下是一些注释的定义,我们看一下可以了解一下这些注释有哪些方法,<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;@</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;JoinColumn<br />
{<br />
&nbsp;&nbsp;&nbsp;String&nbsp;name(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;String&nbsp;referencedColumnName(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;unique(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;nullable(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;insertable(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;updatable(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;String&nbsp;columnDefinition(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;String&nbsp;table(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
}<br />
</span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;@</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;OneToOne<br />
{<br />
&nbsp;&nbsp;&nbsp;Class&nbsp;targetEntity(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">.</span><span style="color: #0000ff">class</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;CascadeType[]&nbsp;cascade(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;{};<br />
&nbsp;&nbsp;&nbsp;FetchType&nbsp;<br />
&nbsp;fetch(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;EAGER;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;optional(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;String&nbsp;mappedBy(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
}<br />
</span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;@</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;PrimaryKeyJoinColumn<br />
{<br />
&nbsp;&nbsp;&nbsp;String&nbsp;name(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;String&nbsp;referencedColumnName(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;String&nbsp;columnDefinition(&nbsp;)&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
}<br />
</span></div>
<br />
<br />
好了,一对一单向差不多就这么些吧,明天再看一下一对一双向的情况.<br />

          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125369#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 Sep 2007 19:44:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125369</link>
        <guid>http://hadeslee.javaeye.com/blog/125369</guid>
      </item>
      <item>
        <title>男人25岁前的忠告</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125370" style="color:red;">http://hadeslee.javaeye.com/blog/125370</a>&nbsp;
          发表时间: 2007年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          男人25岁前的忠告<br />
这是忠告也是建议. <br />
1.男人是社会的主体,不管你信或不信.所以男人应该有种责任感. <br />
2.25岁之前,请记得,爱情通常是假的,或者不是你所想象的那样纯洁和永远.如果你过了25岁,那么你应该懂得这个道理. <br />
3.吃饭7成饱最舒服.对待女友最多也请你保持在7成. <br />
4.30岁之前请爱惜自己的身体,前30年你找病,后30年病找你.如果你过了30岁,你自然也会懂得这个道理. <br />
5.事业远比爱情重要.如果说事业都不能永恒,那么爱情只能算是昙花一现. <br />
6.不要轻易接受追求你的女孩.女追男隔层纱.如果你很容易就陷进去,你会发现你会错过很多东西,失去很多东西. <br />
7.请你相信,能用钱解决的问题,都不是问题.如果你认为钱索王道,有钱有女人,没钱没女人,那么.女人不是问题. <br />
8.请永远积极向上.每个男人都有他可爱的地方,但是不可爱的地方只有不积极面对生活. <br />
9.不要连续2次让同一个女人伤害.好马不吃回头草,是有他道理的.如果认真考虑过该分手,那么请不要做任何舍不得的行动. <br />
10.如果你和你前女友能做朋友,那么你要问自己:为什么?如果分手后还是朋友,那么只有2个可能:.你们当初都只是玩玩而已,没付出彼此最真的感情.或者:必定有个人是在默默的付出无怨无悔! <br />
11.永远不要太相信女人在恋爱时的甜言蜜语.都说女人爱听甜言蜜语,其实,男人更喜欢. <br />
12.请不要为自己的相貌或者身高过分担心和自卑.人是动物,但是区别于动物.先天条件并不是阻挡你好好生活的借口.人的心灵远胜于相貌,请相信这点.如果有人以相貌取人,那么你也没必要太在意.因为他从某种意义来讲,只是只动物.你会跟动物怄气吗? <br />
13.失恋时,只有2种可能,要么你爱她她不爱你,或者相反.那么,当你爱的人不再爱你,或者从来没爱过你时.你没有遗憾,因为你失去的只是一个不爱你的人. <br />
14.请不要欺骗善良的女孩.这个世界上,善良的女孩太少. <br />
15.不能偏激的认为金钱万能,至少,金钱治不好艾滋病. <br />
16.请一定要有自信.你就是一道风景,没必要在别人风景里面仰视. <br />
17.受到再大的打击,只要生命还在,请相信每天的太阳都是新的. <br />
18.爱情永远不可能是天平.你想在爱情里幸福就要舍得伤心. <br />
19.如果你喜欢一个认为别人应该对她好的mm,请尽早放弃.没有人是应该对一个人好的.如果她不明白这个道理,也就是她根本不懂得珍惜. <br />
20.不要因为寂寞而'找'gf,寂寞男人请要学会品味寂寞.请记住:即使寂寞,远方黑暗的夜空下,一定有人和你一样,寂寞的人不同,仰望的星空却是唯一. <br />
21.任何事没有永远.也别问怎样才能永远.生活有很多无奈.请尽量充实自己,充实生活.请善待生活. <br />
end.男人有很多无奈,生活很累但是因为生活才有意义.当你以为你一无所有时,你至少还有时间,时间能抚平一切创伤.所以请不要流泪.....

          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125370#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Sep 2007 14:58:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125370</link>
        <guid>http://hadeslee.javaeye.com/blog/125370</guid>
      </item>
      <item>
        <title>EJB学习日记(7)</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125371" style="color:red;">http://hadeslee.javaeye.com/blog/125371</a>&nbsp;
          发表时间: 2007年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          七种映射关系<br />
<br />
在实体BEAN中,互相之间的关系有七种,分别是如下七种<br />
<br />
1,一对一单向<br />
2,一对一双向<br />
3,一对多单向<br />
4,一对多双向<br />
5,多对一单向<br />
6,多对多单向<br />
7,多对多双向<br />
<br />
大家可能发现,为什么没有多对一双向呢?其实多对一的双向,就是一对多的双向,道理是一样的.<br />
<br />
今天把典型的应用场哈举个例子,改天再用代码来说话<br />
1,一对一单向.<br />
典型场合:一个人对应一个地址,我们一般只要求给定一个人知道他的地址,却不需要给定一个地址确定一个人的<br />
2,一对一双向<br />
典型场合:一个人对应一个身份证号,我们可以根据一个人得到它的身份证号码,也可以根据身份证号码确定一个人<br />
3,一对多单向<br />
典型场合:一个人对应很多他的电话, 我们一般只要求给定一个人得到他的所有电话,却不会用一个电话去反查一个人,因为电话是很容易改变的<br />
4,一对多双向<br />
典型场合:旅行和预订,一次旅程有多个预订,我们可以根据某次旅程查到这次旅行所对应的预订,也可以根据一次预订查到它所属的那次旅程<br />
5,多对一单向<br />
典型场合:人民和国家,我们只需要知道我们人民是属于哪个国家的,而国家不可能确实地知道它有多少个人民.<br />
6,多对多单向<br />
典型场合:预定和舱位,你可以多次预定一个舱位,也可一定预定多个舱位.一般都是根据某次预定来知道预定了哪些舱位<br />
7,多对多双向<br />
典型场合:老师和学生,老师可以有很多学生,学生也可以有很多老师,可以根据学生查出他所有的老师,也可以根据老师查出他所有的学生.<br />
<br />
其实在数据库里面,表现的形式单向和双向都是一样的,只是我们在程序里面为了逻辑清楚而人分的分类了.下次我们将了解一下这七种关系的不同代码,以及他们在数据库里面的表现形式

          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125371#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Sep 2007 09:47:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125371</link>
        <guid>http://hadeslee.javaeye.com/blog/125371</guid>
      </item>
      <item>
        <title>JAVA元数据注释初探</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125372" style="color:red;">http://hadeslee.javaeye.com/blog/125372</a>&nbsp;
          发表时间: 2007年09月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天了解一下JAVA元数据的用法和一些作用,拿出一些例子,给自己看,怕自己以后忘了</p>
<p>JAVA的元数据功能是JDK1.5才开始支持的,以前都没有,正因为是新支持的,所以有关于它的介绍挺少,用处也不太多,最近发现很多框架都可以把它用来配置一些东西,以代替以前比较复杂的XML配置.想像一下,在JAVA代码中直接写入注释来配置,那该是多么好的事情,让我们写习惯了代码和看习惯了代码的人来说,这无疑是一件很爽的事情.</p>
<p>我们可以使用JAVA内置的注释内型,如果觉得不够用,可以定义自己的注释内型,定义如下<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;MyType.java&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2006年12月7日,&nbsp;下午3:40&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Template&nbsp;Manager&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;testAnno;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;lbf&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.annotation.</span><span style="color: #000000">*</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Retention(RetentionPolicy.RUNTIME)&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Target({ElementType.TYPE,ElementType.METHOD})&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;@</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;MyType&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;authorName();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;lastModified();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;bugFixes()&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ok</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</span></div>
<br />
<p>这里我定义了一个我自己的注释类,声明方式和声明接口差不多,只不过在interface前面多了一个@符号.&nbsp;</p>
<p>注释类也可以用注释类注释,如此下去.</p>
<p><span class="annotation">@Retention</span><span>(RetentionPolicy.RUNTIME) </span></p>
<p><span>这句表示它的保存范围是到RUNTIME,也就是运行时,这样在类运行的时候,我们也可以取到有关它的信息.</span></p>
<p><span><span class="annotation">@Target</span><span>({ElementType.TYPE,ElementType.METHOD})&nbsp;&nbsp;</span></span></p>
<p><span><span>这句表示它的适用对象,它可以用在哪里地方,我这里定义的是它可以用在类的定义和方法的定义上</span></span></p>
<p><span><span>然后我们看我们是怎么为我们写的类加上注释的</span></span></p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;Test1.java&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2006年12月7日,&nbsp;下午3:34&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Template&nbsp;Manager&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;testAnno;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;lbf&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.annotation.</span><span style="color: #000000">*</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@MyType(authorName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hadeslee</span><span style="color: #000000">"</span><span style="color: #000000">,lastModified</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20061207</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test1&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;Creates&nbsp;a&nbsp;new&nbsp;instance&nbsp;of&nbsp;Test1&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Test1()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Deprecated&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@MyType(authorName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hadeslee</span><span style="color: #000000">"</span><span style="color: #000000">,lastModified</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20061207</span><span style="color: #000000">"</span><span style="color: #000000">,bugFixes</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">what</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doSth(){&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@MyType(authorName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hadeslee</span><span style="color: #000000">"</span><span style="color: #000000">,lastModified</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20061207</span><span style="color: #000000">"</span><span style="color: #000000">,bugFixes</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">what</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doAnother(){&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></div>
<br />
加了元数据的类和不加元数据的类差不多,只不过如果你的元数据注释如果是运行时的话,你的类文件可能会比不加元数据大一些,因为它必须把一些注释的信息写入到class文件中去,我们已经注释了我们的类,现在我们来看一下,我们如何去取我们的注释,<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;GetAnno.java&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;Created&nbsp;on&nbsp;2006年12月7日,&nbsp;下午3:46&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Template&nbsp;Manager&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;testAnno;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;lbf&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.annotation.</span><span style="color: #000000">*</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.</span><span style="color: #000000">*</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GetAnno&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;Creates&nbsp;a&nbsp;new&nbsp;instance&nbsp;of&nbsp;GetAnno&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;GetAnno()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test1&nbsp;t</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Test1();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;c</span><span style="color: #000000">=</span><span style="color: #000000">Test1.</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annotation[]&nbsp;as</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.getDeclaredAnnotations();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Annotation&nbsp;an:as){&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">类Test1的注释</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">an);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;med</span><span style="color: #000000">=</span><span style="color: #000000">c.getDeclaredMethod(</span><span style="color: #000000">"</span><span style="color: #000000">doSth</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annotation[]&nbsp;ass</span><span style="color: #000000">=</span><span style="color: #000000">med.getDeclaredAnnotations();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Annotation&nbsp;an:ass){&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class</span><span style="color: #000000">&lt;!--/</span><span style="color: #000000">sp</span><span style="color: #000000">--&gt;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Annotation</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;clazz</span><span style="color: #000000">=</span><span style="color: #000000">an.annotationType();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annotation[]&nbsp;ased</span><span style="color: #000000">=</span><span style="color: #000000">clazz.getAnnotations();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Annotation&nbsp;ad:ased){&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">注释的注释:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ad);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">方法doSth的注释：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">an);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;</span></div>
<br />
此程序输出如下
<p><font face="Arial">类Test1的注释@testAnno.MyType(bugFixes=ok, authorName=hadeslee, lastModified=20061207)<br />
注释的注释:@java.lang.annotation.Documented()<br />
注释的注释:@java.lang.annotation.Retention(value=RUNTIME)<br />
方法doSth的注释：@java.lang.Deprecated()<br />
注释的注释:@java.lang.annotation.Retention(value=RUNTIME)<br />
注释的注释:@java.lang.annotation.Target(value=[TYPE, METHOD])<br />
方法doSth的注释：@testAnno.MyType(bugFixes=what, authorName=hadeslee, lastModified=20061207)<br />
<br />
</font></p>
<p>简单的写了一点点关元数据的东西,希望对自己或者对别人有一点点帮助.</p>
<p>&nbsp;</p>
<p>从这代码里,我们可以看出,取注释其实很简单,就是利用反射机制来取的.不过我们要特别注意到的一点是,我们不但可以取我们定义的类的注释,也可以取注释的注释,我们这里只取到了MyType的注释,其实还可以往下取,在取的过程中,我们可以看到这些元数据注释类都用了哪些注释:)</p>

          <br/>
          <span style="color:red;">
            <a href="http://hadeslee.javaeye.com/blog/125372#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 15 Sep 2007 09:22:00 +0800</pubDate>
        <link>http://hadeslee.javaeye.com/blog/125372</link>
        <guid>http://hadeslee.javaeye.com/blog/125372</guid>
      </item>
      <item>
        <title>EJB初学日记（6）</title>
        <author>lbfhappy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hadeslee.javaeye.com">lbfhappy</a>&nbsp;
          链接：<a href="http://hadeslee.javaeye.com/blog/125373" style="color:red;">http://hadeslee.javaeye.com/blog/125373</a>&nbsp;
          发表时间: 2007年09月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span class="dark_c" style="font-size: 14pt; font-weight: bold;">
实体BEAN的关联<br />
<br />
</span>
<p>今天自己写了一个例子,有关实体BEAN的关联问题,我写的这个例子是一对多的情况,一是人,多是狗,一个人可以养多条狗,每条狗都必须有一个主
人,在删除主人的时候,狗就没有存在的必要了,所以狗也要跟着删除,可是删除狗的时候,主人却可以在.一开始我实现的时候,删除狗的操作是错误的,我以为
直接把Person里面的Dog删掉,然后更新Person就可以了,谁知不是这样的,你在增加了Person中的狗的时候,你更新Person就可以把
狗加进来了,可是当你把Person里面的狗删除掉时,再更新Person,数据库里面的狗却不会少.而要你显示的调用em.remove()去删除你想
删除的狗,并且你对这狗不能设置为级联删除,否则你删除狗的时候把人也删掉了,这当然不是我们希望看到的.</p>
<p>下面附上代码</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
<a href="http://www.CodeHighlighter.com/" target="_blank">http://www.CodeHighlighter.com/</a><br />
<br />
--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.hadeslee.session;&nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.hadeslee.entity.Person;&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.ejb.Remote;&nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;<br />
&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;">&nbsp;&nbsp;<br />
&nbsp; *&nbsp;This&nbsp;is&nbsp;the&nbsp;business&nbsp;interface&nbsp;for&nbsp;PersonDAO&nbsp;enterprise&nbsp;bean.&nbsp;&nbsp;<br />
&nbsp; </span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;@Remote&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;PersonDAORemote&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;insertPerson(Person&nbsp;p);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;List&nbsp;getAllPersons();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Person&nbsp;findPerson(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;id);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;deletePerson(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;id);&nbsp;&nbsp;&nbsp;<br />
&nbsp;}&nbsp;&nbsp;&nbsp; <br />
</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
<a href="http://www.CodeHighlighter.com/" target="_blank">http://www.CodeHighlighter.com/</a><br />
<br />
--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.hadeslee.session;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.hadeslee.entity.Dog;&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.hadeslee.entity.Person;&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.ejb.Remote;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;*&nbsp;This&nbsp;is&nbsp;the&nbsp;business&nbsp;interface&nbsp;for&nbsp;PersonToDogs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enterprise&nbsp;bean.&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;@Remote&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;PersonToDogsRemote&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;PersonDAORemote{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;addDog(Person&nbsp;p,Dog&nbsp;dog);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Person&nbsp;removeDog(Person&nbsp;p,Dog&nbsp;dog);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;List&nbsp;getDogs(Person&nbs