??xml version="1.0" encoding="utf-8" standalone="yes"?>99精品欧美一区二区三区综合在线,五月天久久综合网,亚洲片在线资源http://www.aygfsteel.com/justfang/archive/2012/03/31/373106.htmljustjustSat, 31 Mar 2012 03:09:00 GMThttp://www.aygfsteel.com/justfang/archive/2012/03/31/373106.htmlhttp://www.aygfsteel.com/justfang/comments/373106.htmlhttp://www.aygfsteel.com/justfang/archive/2012/03/31/373106.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/373106.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/373106.html阅读全文

just 2012-03-31 11:09 发表评论
]]>
oracle 实践中常用命?/title><link>http://www.aygfsteel.com/justfang/archive/2011/09/16/358777.html</link><dc:creator>just</dc:creator><author>just</author><pubDate>Fri, 16 Sep 2011 03:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/justfang/archive/2011/09/16/358777.html</guid><wfw:comment>http://www.aygfsteel.com/justfang/comments/358777.html</wfw:comment><comments>http://www.aygfsteel.com/justfang/archive/2011/09/16/358777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/justfang/comments/commentRss/358777.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/justfang/services/trackbacks/358777.html</trackback:ping><description><![CDATA[1.decode(value,if1,then1,if2,then2,if3,then3,.....,else)<br />如果value{于if1ӞDECODE函数的结果返回then1,....,如何不等于Q何一个if|则返回else<br />2.sign(变量1-变量2)<br />如果Q变?-变量2Q大?q回1,于0q回-1,{于0q回0 <br /><div>3.COALESCE (expression_1, expression_2, ...,expression_n)<br /><div>列表中第一个非I的表达式是函数的返回|如果所有的表达式都是空|最l将q回一个空倹{?/div></div><img src ="http://www.aygfsteel.com/justfang/aggbug/358777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/justfang/" target="_blank">just</a> 2011-09-16 11:32 <a href="http://www.aygfsteel.com/justfang/archive/2011/09/16/358777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在联更新的时候ؓ什么无法向list中add对象呢?http://www.aygfsteel.com/justfang/archive/2010/11/10/337750.htmljustjustWed, 10 Nov 2010 11:19:00 GMThttp://www.aygfsteel.com/justfang/archive/2010/11/10/337750.htmlhttp://www.aygfsteel.com/justfang/comments/337750.htmlhttp://www.aygfsteel.com/justfang/archive/2010/11/10/337750.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/337750.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/337750.html
A = dao.read(id);
List<B> bList = A.getBList();
bList.clear();

B b1 = new B();
b1.setA(A);
bList.add(b1);

B b2 = new B();
b2.setA(A);
bList.add(b2);

A.


just 2010-11-10 19:19 发表评论
]]>
cascade="all-delete-orphan" 处理http://www.aygfsteel.com/justfang/archive/2010/11/09/337639.htmljustjustTue, 09 Nov 2010 08:30:00 GMThttp://www.aygfsteel.com/justfang/archive/2010/11/09/337639.htmlhttp://www.aygfsteel.com/justfang/comments/337639.htmlhttp://www.aygfsteel.com/justfang/archive/2010/11/09/337639.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/337639.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/337639.html比如我们现在有一个Parent的实体,在Parent实体当中有一个children的Set
׃q个children的数据ƈ非非帔R要,Z方便Q我们在修改parent的时候,做法l常都是
1,清空children全部删了Q再把新的children全部加进厅R?br /> 今天早上做这一斚w工作的时候遇C个问题,是在更新parent的时候,报了一?br /> Don't dereference a collection with cascade="all-delete-orphan"
的异常,l常一半个时的查资料和调试,l于扑ֈ了解决问题的办法
刚刚开始我的做法ؓQ?br /> parent = parentService.findParentById(id);
parent.getChildren.clear();
parent.setChildren(newChildren);
parentService.updateparent(parent);
q样做一定会报出一个Don't dereference a collection with cascade="all-delete-orphan"的异?br /> 原来是,对于parent的childrenq个SetQ它本n是一个持久的集合Q该集合存在于hibernate的对象池当中Q通过
parent.setChildren(newChildren)的设|之后,本n已经parent对children集合的引用指到对象池外的一个集合?br /> 后来查询资料后的做法为:
parent = parentService.findParentById(id);
parent.getChildren.clear();
parent.getChildren.addAll(newChildren);
parentService.updateparent(parent);
做了几次试Q问题解冟?br /> hbm配置如下Q?br /> <set lazy="true" name="children" cascade="all,delete-orphan" inverse="true">
   <key column="PARENT_ID"/>
   <one-to-many class="Child"/>
</set>
另外Qhibernate 3已经cascade当中的选项做了修改Q现在已l没有了all-delete-orphanq个选项Q虽然hibernate
内部q是支持q个选项……



just 2010-11-09 16:30 发表评论
]]>
mvn 常用命ohttp://www.aygfsteel.com/justfang/archive/2009/12/24/307125.htmljustjustThu, 24 Dec 2009 04:03:00 GMThttp://www.aygfsteel.com/justfang/archive/2009/12/24/307125.htmlhttp://www.aygfsteel.com/justfang/comments/307125.htmlhttp://www.aygfsteel.com/justfang/archive/2009/12/24/307125.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/307125.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/307125.htmlmvn install -U -e -Dmaven.test.skip=true //安装跌试c?昄详细安装错误信息
mvn test -Dtest=myTest //q行某一个单元测试类



just 2009-12-24 12:03 发表评论
]]>
discriminator-valuehttp://www.aygfsteel.com/justfang/archive/2009/12/23/307013.htmljustjustWed, 23 Dec 2009 04:26:00 GMThttp://www.aygfsteel.com/justfang/archive/2009/12/23/307013.htmlhttp://www.aygfsteel.com/justfang/comments/307013.htmlhttp://www.aygfsteel.com/justfang/archive/2009/12/23/307013.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/307013.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/307013.html可能l常遇到q样的情况:
       
在数据库表中会有q样的一个字D는来区别记录的属性,如:在客戯中有一个字D表C客L别,当这个记录ؓA时是一U客P?span lang="EN-US">B时是二客户。在?span lang="EN-US">hiberante?span lang="EN-US">OR表示时类可能是这LQ?/span>
       public class Customer{
          private String flag;   //
表示客户的?/span>
          ...
       }    
       
然后Q在E序中手动控?span lang="EN-US">flag的|但是q样当每个的客h不同的属性时Customercd包含所有别的属性,q样不是很好?/span>
       hibernate
提供一?span lang="EN-US">Discriminator映射的方法,是把一个表映射成不同的c,有不同的属性?/span>

       public class Customer{
          //
包含所有别的公共属?/span>
          ...
        }
       
       public class CustomerA extends Customer{
       //
只包括一U客LҎ属?/span>
        }

       public class CustomerB extends Customer{
       //
只包含二U客L有的属?/span>
        }
q样更符合面向对象的原则Q然后在hbm.xml中这样写Q?/span>
<id name="id" type="int">
    ...
</id>
<discriminator column="flag" type="string" />
<!-- 
公共属性的映射 -->
<subclass name="CustomerA" discriminator-value="A">
<!-- 
一U客L有属性的映射
 -->
</subclass>
<subclass name="CustomerB" discriminator-value="B">
<!-- 
二客户Ҏ属性的映射
 -->
</subclass>

q样可以单独的?span lang="EN-US">CustomerA,CustomerB
q样的实例了Q做数据库修Ҏ׃用关?span lang="EN-US">flag
字段的gQ会自动的加A?span lang="EN-US">B
?/span>

如果是?span lang="EN-US">hibernate Annotation而不?span lang="EN-US">xml
来描q映谢关p,代码如下Q?/span>
@Entity
@Table(name = "customer")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "flag", discriminatorType = DiscriminatorType.STRING)
public class Customer{
}

@Entity
@DiscriminatorValue(value = "A")
public class CustomerA extends Customer{
}

@Entity
@DiscriminatorValue(value = "B")
public class CustomerB extends Customer{
}

q样可以了?/span>

just 2009-12-23 12:26 发表评论
]]>
SQL CASE 语句http://www.aygfsteel.com/justfang/archive/2009/12/23/306984.htmljustjustWed, 23 Dec 2009 02:24:00 GMThttp://www.aygfsteel.com/justfang/archive/2009/12/23/306984.htmlhttp://www.aygfsteel.com/justfang/comments/306984.htmlhttp://www.aygfsteel.com/justfang/archive/2009/12/23/306984.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/306984.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/306984.htmlCaseh两种格式。简单Case函数和Case搜烦函数?nbsp;
--单Case函数
CASE sex
         
WHEN '1' THEN '?/span>'
         
WHEN '2' THEN '?/span>'
ELSE '其他' END
--Case搜烦函数
CASE WHEN sex = '1' THEN '?/span>'
         
WHEN sex = '2' THEN '?/span>'
ELSE '其他' END

q两U方式,可以实现相同的功能。简单Case函数的写法相Ҏ较简z,但是和Case搜烦函数相比Q功能方面会有些限制Q比如写判断式?nbsp;
q有一个需要注意的问题QCase函数只返回第一个符合条件的|剩下的Case部分会被自动忽略?nbsp;
--比如_下面q段SQLQ你永远无法得到“W二c?#8221;q个l果
CASE WHEN col_1 IN ( 'a''b'THEN 'W一c?/span>'
         
WHEN col_1 IN ('a')       THEN 'W二c?/span>'
ELSE'其他' END

下面我们来看一下,使用Case函数都能做些什么事情?nbsp;

一Q已知数据按照另外一U方式进行分l,分析?nbsp;

有如下数?(Z看得更清楚,我ƈ没有使用国家代码Q而是直接用国家名作ؓPrimary 
Key
国家QcountryQ?nbsp;   人口QpopulationQ?br /> 中国    
600
国    
100
加拿?nbsp;   
100
英国    
200
法国    
300
日本    
250
德国    
200
墨西?nbsp;   
50
印度    
250

Ҏq个国家人口数据Q统计亚z和北美z的人口数量。应该得C面这个结果?nbsp;
z?nbsp;   人口
亚洲    
1100
北美z?nbsp;   
250
其他    
700

惌解决q个问题Q你会怎么做?生成一个带有洲Code的ViewQ是一个解x法,但是q样很难动态的改变l计的方式?nbsp;
如果使用Case函数QSQL代码如下: 
SELECT  SUM(population),
        
CASE country
                
WHEN '中国'     THEN '亚洲'
                
WHEN '印度'     THEN '亚洲'
                
WHEN '日本'     THEN '亚洲'
                
WHEN ''     THEN '北美z?/span>'
                
WHEN '加拿?/span>'  THEN '北美z?/span>'
                
WHEN '墨西?/span>'  THEN '北美z?/span>'
        
ELSE '其他' END
FROM    Table_A
GROUP BY CASE country
                
WHEN '中国'     THEN '亚洲'
                
WHEN '印度'     THEN '亚洲'
                
WHEN '日本'     THEN '亚洲'
                
WHEN ''     THEN '北美z?/span>'
                
WHEN '加拿?/span>'  THEN '北美z?/span>'
                
WHEN '墨西?/span>'  THEN '北美z?/span>'
        
ELSE '其他' END;

同样的,我们也可以用q个Ҏ来判断工资的{Qƈl计每一{的h数。SQL代码如下Q?nbsp;
SELECT
        
CASE WHEN salary <= 500 THEN '1'
             
WHEN salary > 500 AND salary <= 600  THEN '2'
             
WHEN salary > 600 AND salary <= 800  THEN '3'
             
WHEN salary > 800 AND salary <= 1000 THEN '4'
        
ELSE NULL END salary_class,
        
COUNT(*)
FROM    Table_A
GROUP BY
        
CASE WHEN salary <= 500 THEN '1'
             
WHEN salary > 500 AND salary <= 600  THEN '2'
             
WHEN salary > 600 AND salary <= 800  THEN '3'
             
WHEN salary > 800 AND salary <= 1000 THEN '4'
        
ELSE NULL END;

二,用一个SQL语句完成不同条g的分l?nbsp;

有如下数?nbsp;
国家QcountryQ?nbsp;   性别QsexQ?nbsp;   人口QpopulationQ?br /> 中国    
1    340
中国    
2    260
国    
1    45
国    
2    55
加拿?nbsp;   
1    51
加拿?nbsp;   
2    49
英国    
1    40
英国    
2    60

按照国家和性别q行分组Q得出结果如?nbsp;
国家    ?nbsp;   ?br /> 中国    
340    260
国    
45    55
加拿?nbsp;   
51    49
英国    
40    60

普通情况下Q用UNION也可以实现用一条语句进行查询。但是那样增加消?两个Select部分)Q而且SQL语句会比较长?br /> 下面是一个是用Case函数来完成这个功能的例子 
SELECT country,
       
SUMCASE WHEN sex = '1' THEN 
                      population 
ELSE 0 END),  --hh?/span>
       SUMCASE WHEN sex = '2' THEN 
                      population 
ELSE 0 END)   --xh?/span>
FROM  Table_A
GROUP BY country;

q样我们使用SelectQ完成对二维表的输出形式Q充分显CZCase函数的强大?nbsp;

三,在Check中用Case函数?nbsp;

在Check中用Case函数在很多情况下都是非常不错的解x法。可能有很多人根本就不用CheckQ那么我你在看过下面的例子之后也试一下在SQL中用Check?nbsp;
下面我们来D个例?nbsp;
公司AQ这个公司有个规定,奌员的工资必须高于1000块。如果用Check和Case来表现的话,如下所C?nbsp;
CONSTRAINT check_salary CHECK
           ( 
CASE WHEN sex = '2'
                  
THEN CASE WHEN salary > 1000
                        
THEN 1 ELSE 0 END
                  
ELSE 1 END = 1 )

如果单纯使用CheckQ如下所C?nbsp;
CONSTRAINT check_salary CHECK
           ( sex 
= '2' AND salary > 1000 )

奌员的条g倒是W合了,甯员就无法输入了?/span>


just 2009-12-23 10:24 发表评论
]]>
SQL 外链接操作小l?inner join left join right joinhttp://www.aygfsteel.com/justfang/archive/2009/12/22/306936.htmljustjustTue, 22 Dec 2009 09:56:00 GMThttp://www.aygfsteel.com/justfang/archive/2009/12/22/306936.htmlhttp://www.aygfsteel.com/justfang/comments/306936.htmlhttp://www.aygfsteel.com/justfang/archive/2009/12/22/306936.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/306936.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/306936.html? 外部q接和自联接 inner join({D? 只返回两个表中联l字D늛{的?left join(左联? q回包括左表中的所有记录和双中联l字D늛{的记录 right join(双? q回包括双中的所有记录和左表中联l字D늛{的记录 on 指定表间联结字段及其关系的等?"=" 表达? q回 true ?false. 当表辑ּq回 true ? 则查询中包含该记? ! 外部q接只能操作已存在于数据库中的数?br /> update (ctarticle as a left join ctclass as c on a.classid = c.classid) left join cttag as b on a.articleid = b.articleid 
set tag=tag+' ', b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid 
where a.classid=23 and a.nclassid=0 and tagid is not null 

update (ctarticle as a left join (ctnclass as c left join ctclass as d on c.classid = d.classid) on a.nclassid = c.nclassid and a.classid = c.classid) left join cttag as b on a.articleid = b.articleid set tag=d.class+' '+c.nclass, b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid where a.classid=23 and a.nclassid=197; 

更新操作 
左连接中数据的筛?nbsp;
insert into cttag(articleid,classid,nclassid) select a.articleid,a.classid,a.nclassid from ctarticle a left join cttag b on a.articleid=b.articleid where b.articleid is null 

//本语句功能ؓ, 昄主表的全部内? 插入数据到副表中没有的数?nbsp;
//主要作用? 让数据减冗?nbsp;

上例中的延箋 
select a.*, b.*, c.*, d.* 
from cttag as d left join ((ctarticle as a left join ctclass as b on a.classid=b.classid) left join ctnclass as c on a.nclassid=c.nclassid) on d.articleid=a.articleid; 

昄文章表中的全? 调用cd表中的栏?nbsp;
select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid 

//作用, 有时在文章表中包含了在个别类别表中没有的数据, 用这个语法可以读出文章表的全部数?nbsp;
//a ?文章? b Zcd, c 为子cd 

同上? 选择q加数据时加上空?nbsp;
insert into cttag(articleid,classid,nclassid,tag) 
select a.articleid,a.classid,a.nclassid,d.class+' '+c.nclass 
from (ctarticle as a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) left join cttag as b on a.articleid = b.articleid where a.classid=4 and a.nclassid=154; 

q接n个表, q追加数据到其中一个表, n=4 
insert into cttag(articleid,classid,nclassid,tag) 
select a.articleid,a.classid,a.nclassid,d.class+c.nclass 
from (ctarticle as a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) left join cttag as b on a.articleid = b.articleid where a.classid=1 and a.nclassid=1; 

//解读 
插入??(?,?,?,?) 
选择 别名a.?, 别名a.?, 别名a.?, 别名d.? 加上 别名c.? 
?(? 别名a 左连?(? 别名c 左连?? 别名d ?别名c.? {于 别名d.?) ?别名a.? {于 别名c.? ?别名a.?=别名c.?) 左连?? 别名b ?别名a.? {于 别名b.? 在那?别名a.?=1 ?别名a.?=1 

q接两个? q追加数据到其中一个表 
insert into cttag(articleid,classid,nclassid) 
select a.articleid,a.classid,a.nclassid 
from ctarticle as a left join cttag as b on a.articleid = b.articleid where a.classid=1 and a.nclassid=1; 

//解读 
插入??(?,?,?) 
选择 别名a.?, 别名a.?, 别名a.? 
?? 别名a 左连?? 别名b ?别名a.? {于 别名b.? 在那?别名a.?=1 ?别名a.?=1 

左连?nbsp;

同步两表的数?nbsp;
update ctarticle a inner join cttag b on a.articleid = b.articleid set b.classid=a.classid, b.nclassid=a.nclassid; 

//解读 
更新 ? 别名a 联接 ? 别名2 ?别名a.? {于 别名b.? 讄 别名b.? 更新?别名a.?, 别名b.? 更新?别名a.? 

叛_q接 
select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=20 

查询别名 a,b ? 只匹?b 表中的内? 

d数据到连接表之一 
insert into cttag ( tag, articleid ) select top 1 b.tag, a.articleid from ctarticle as a left join cttag as b on a.articleid = b.articleid where a.articleid order by a.articleid desc; 

变通中的用法二 
insert into bureply 
select b.*, a.classid, a.nclassid 
from article as a inner join reply as b on a.articleid = b.articleid 
where classid=50; 

实际应用中的变?nbsp;
insert into butag ( tag, articleid, classid, nclassid) 
select b.tag, a.articleid, a.classid, a.nclassid 
from article as a inner join tag as b on a.articleid = b.articleid 
where classid=24; 


d数据到其他表 
insert into butag ( tag, articleid ) 
select b.tag, a.articleid 
from article as a inner join tag as b on a.articleid = b.articleid 
where a.articleid<>false; 

//解读 
d?接收??,?) 
选择 别名b.?, 别名a.? 
?? 表名a 联接 ? 表名b ?别名a.列c {于 别名b.列c 
在哪?别名a.列c 不等?没有 

实际应用中的变?nbsp;
select b.tag, a.articleid, a.classid, a.nclassid 
from article as a inner join tag as b on a.articleid = b.articleid 
where a.classid=24; 

查询 
select b.tag, a.articleid 
from article as a inner join tag as b on a.articleid = b.articleid 
where a.articleid<>false; 

//解读 
选择 别名b.? 别名a.?nbsp;
?? 别名a 联接 ? 别名b ?别名a.列c = 别名b.列c 
在哪?别名a.列c 不等?没有 
? as 不是必要

just 2009-12-22 17:56 发表评论
]]>
SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别http://www.aygfsteel.com/justfang/archive/2009/12/22/306933.htmljustjustTue, 22 Dec 2009 09:26:00 GMThttp://www.aygfsteel.com/justfang/archive/2009/12/22/306933.htmlhttp://www.aygfsteel.com/justfang/comments/306933.htmlhttp://www.aygfsteel.com/justfang/archive/2009/12/22/306933.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/306933.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/306933.htmlSQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别:
IN:定l定的值是否与子查询或列表中的值相匚w?br /> IN 关键字您得以选择与列表中的Q意一个值匹配的行?br /> 当要获得居住?California、Indiana ?Maryland 州的所有作者的姓名和州的列表时Q就需要下列查询:
SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE CategoryID = 1 OR CategoryID = 4 OR CategoryID = 5
然而,如果使用 INQ少键入一些字W也可以得到同样的结果:
SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE CategoryID IN (1, 4, 5)
IN 关键字之后的目必须用逗号隔开Qƈ且括在括号中?br /> 下列查询?titleauthor 表中查找在Q一U书中得到的版税于 50% 的所有作者的 au_idQ然后从 authors 表中选择 au_id ?br /> titleauthor 查询l果匚w的所有作者的姓名Q?nbsp;
SELECT au_lname, au_fname FROM authors WHERE au_id IN (SELECT au_id FROM titleauthor WHERE royaltyper < 50)
l果昄有一些作者属于少?50% 的一cR?br /> NOT IN:通过 NOT IN 关键字引入的子查询也q回一列零值或更多倹{?br /> 以下查询查找没有出版q商业书c的出版商的名称?br /> SELECT pub_name FROM publishers WHERE pub_id NOT IN (SELECT pub_id FROM titles WHERE type = 'business')
使用 EXISTS ?NOT EXISTS 引入的子查询可用于两U集合原理的操作Q交集与差集。两个集合的交集包含同时属于两个原集合的所有元素?br /> 差集包含只属于两个集合中的第一个集合的元素?br /> EXISTS:指定一个子查询Q检行的存在?nbsp;
本示例所C查询查扄位于以字?B 开头的城市中的M出版商出版的书名Q?br /> SELECT DISTINCT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type =
'business')
SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_id FROM titles WHERE type = 'business')
两者的区别:
EXISTS:后面可以是整句的查询语句?SELECT * FROM titles
IN:后面只能是对单列:SELECT pub_id FROM titles
NOT EXISTS:
例如Q要查找不出版商业书c的出版商的名称Q?br /> SELECT pub_name FROM publishers WHERE NOT EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type =
'business')
下面的查询查扑ַl不销售的书的名称:
SELECT title FROM titles WHERE NOT EXISTS (SELECT title_id FROM sales WHERE title_id = titles.title_id)

just 2009-12-22 17:26 发表评论
]]>
discriminator-valuehttp://www.aygfsteel.com/justfang/archive/2009/11/27/303903.htmljustjustFri, 27 Nov 2009 07:27:00 GMThttp://www.aygfsteel.com/justfang/archive/2009/11/27/303903.htmlhttp://www.aygfsteel.com/justfang/comments/303903.htmlhttp://www.aygfsteel.com/justfang/archive/2009/11/27/303903.html#Feedback0http://www.aygfsteel.com/justfang/comments/commentRss/303903.htmlhttp://www.aygfsteel.com/justfang/services/trackbacks/303903.html可能l常遇到q样的情况:
       
在数据库表中会有q样的一个字D는来区别记录的属性,如:在客戯中有一个字D表C客L别,当这个记录ؓA时是一U客P?span lang="EN-US">B时是二客户。在?span lang="EN-US">hiberante?span lang="EN-US">OR表示时类可能是这LQ?/span>
       public class Customer{
          private String flag;   //
表示客户的?/span>
          ...
       }    
       
然后Q在E序中手动控?span lang="EN-US">flag的|但是q样当每个的客h不同的属性时Customercd包含所有别的属性,q样不是很好?/span>
       hibernate
提供一?span lang="EN-US">Discriminator映射的方法,是把一个表映射成不同的c,有不同的属性?/span>

       public class Customer{
          //
包含所有别的公共属?/span>
          ...
        }
       
       public class CustomerA extends Customer{
       //
只包括一U客LҎ属?/span>
        }

       public class CustomerB extends Customer{
       //
只包含二U客L有的属?/span>
        }
q样更符合面向对象的原则Q然后在hbm.xml中这样写Q?/span>
<id name="id" type="int">
    ...
</id>
<discriminator column="flag" type="string" />
<!-- 
公共属性的映射 -->
<subclass name="CustomerA" discriminator-value="A">
<!-- 
一U客L有属性的映射
 -->
</subclass>
<subclass name="CustomerB" discriminator-value="B">
<!-- 
二客户Ҏ属性的映射
 -->
</subclass>

q样可以单独的?span lang="EN-US">CustomerA,CustomerB
q样的实例了Q做数据库修Ҏ׃用关?span lang="EN-US">flag
字段的gQ会自动的加A?span lang="EN-US">B
?/span>

如果是?span lang="EN-US">hibernate Annotation而不?span lang="EN-US">xml
来描q映谢关p,代码如下Q?/span>
@Entity
@Table(name = "customer")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "flag", discriminatorType = DiscriminatorType.STRING)
public class Customer{
}

@Entity
@DiscriminatorValue(value = "A")
public class CustomerA extends Customer{
}

@Entity
@DiscriminatorValue(value = "B")
public class CustomerB extends Customer{
}

q样可以了?/span>

just 2009-11-27 15:27 发表评论
]]>
վ֩ģ壺 Ͻ| ֻ| Դ| | | Ȫ| | | ֱ| | ֹ| | ī񹤿| | | | | | ɽ| | Ͳ| ˳| | ̨| | | | | ƽ| ν| Ǩ| | ԭ| Ϫ| | ƽ| ˳| ƽ| | | ϻ|