Hibernate Forums - View topic - 下面的这种sql如何处理?

来源:百度文库 编辑:神马文学网 时间:2024/04/30 02:29:55
 Search   Members   Top 10   Register
Watched Topics   Profile   Log in


Hibernate Forums Index ->Hibernate Users (Chinese)View unanswered posts
Topic: 下面的这种sql如何处理?   
| Previous | Next
Author Message
jweban
Newbie
Joined: 18 May 2005
Posts: 7
10 credits (What‘s this?)

Posted: Fri Jun 10, 2005 8:18 am    Post subject: 下面的这种sql如何处理?
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailinglists/HowToAskForHelp
Hibernate version:
2.1.6
Mapping documents:
Code between sessionFactory.openSession() and session.close():
Full stack trace of any exception that occurs:
Name and version of the database you are using:
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt:
select * from ( select a.id,a.code,a.name from TA a,TB b where a.id=b.id )
这种带有临时表的查询如何处理?
谢谢
e_water_boy
Newbie
Joined: 17 Jun 2005
Posts: 9
10 credits (What‘s this?)


Posted: Fri Jun 17, 2005 7:52 am    Post subject:
你看看你的数据库支持不支持这种查询?
Post rating: This posting has not been rated so far.
jweban
Newbie
Joined: 18 May 2005
Posts: 7
10 credits (What‘s this?)

Posted: Mon Jun 20, 2005 12:57 am    Post subject:
支持阿,还有什么数据库不支持这种简单查询吗?
caoxggmail
Newbie
Joined: 25 Feb 2005
Posts: 42
Location: Nanjing,China
10 credits (What‘s this?)


Posted: Tue Jun 21, 2005 7:57 am    Post subject:
hibernate支持子查询,但是却不支持如你的查询这样,把子表中查询出的结果在组合成为一个对象的形式。
我觉得你的例子不当,没有反映你的目的。记住:Hibernate并非是SQL包装器,你用hibernate,你的思维应该是基于对象,而非表。
_________________
你可以做你想做的任何事情,不过要做好为此付出代价的准备。
Post rating: This posting has not been rated so far.
jweban
Newbie
Joined: 18 May 2005
Posts: 7
10 credits (What‘s this?)

Posted: Wed Jun 22, 2005 12:38 am    Post subject:
caoxggmail wrote:
hibernate支持子查询,但是却不支持如你的查询这样,把子表中查询出的结果在组合成为一个对象的形式。
我觉得你的例子不当,没有反映你的目的。记住:Hibernate并非是SQL包装器,你用hibernate,你的思维应该是基于对象,而非表。
第一,在实际工作中确实存在这样的sql,(存在就是合理的)
第二,思维基于对象何解?还请多多指教。
caoxggmail
Newbie
Joined: 25 Feb 2005
Posts: 42
Location: Nanjing,China
10 credits (What‘s this?)


Posted: Thu Jun 23, 2005 9:36 am    Post subject:
jweban wrote:
第一,在实际工作中确实存在这样的sql,(存在就是合理的)
第二,思维基于对象何解?还请多多指教。
1, 取消承兑汇票查询的查询结果中的托收/预收
2,增加退票状态。
jweban wrote:
第一,在实际工作中确实存在这样的sql,(存在就是合理的)
第二,思维基于对象何解?还请多多指教。
没错,在写SQL的时候,经常出现大量的多表关联,甚至于大量的子查询。
我们都知道,ER模型的基础是entity,这表现为表,然后用relation加以关联,这个relation表现为外键。
但是我们在java中应用的时候,用的却是对象而非表。在不用hibernate的时候,你可能感觉不到这有什么问题。我要什么什么逻辑,用SQL执行,然后把结果打印在stdout或者页面,或者报表或者随便什么地方,那么此时,你用java,和用C有任何不同之处吗?用C不是一样做这样的事情吗?那位什么我还要用java,?
这里有一个从E-R模型转换到对象模型的问题。hibernate的口号是,符合java管理的持久化,也就是说,你的逻辑代码处理的应该是对象。
举个例子,一个人的工资与奖金合计,用sql语句这么写:select a.salary+a.bonus from xxx where xxx=xxx
用java代码,你可以把这个sql用jdbc直接取得这个值;也可以用hibernate获得一个user对象a,然后执行payment=a.getSalary()+ a.getBonus。
前者就是用ER模型在思考问题,后者是用对象的观点在思考问题。这样有什么好处?这是一个统一的模型,有了对象模型,假若有三个字段可能两两相加,我们不需要在SQL语句中增加一个新的计算,重新修改你的sql语句,而是用java语言的运算符去计算。
_________________
你可以做你想做的任何事情,不过要做好为此付出代价的准备。
Post rating: This posting has not been rated so far.
jweban
Newbie
Joined: 18 May 2005
Posts: 7
10 credits (What‘s this?)

Posted: Fri Jun 24, 2005 5:46 am    Post subject:
你是不是说,能用对象实现的逻辑尽量通过对象来处理,这样就保证了访问db的一致性.
可是话说回来,本来sql语句就能实现的东西,非要通过oo的东西在处理一遍的话好吗?那么我们用db是不是用的功能也太简单了吧.毕竟oracle也好sqlserver也好,都很容易处理复杂查询.同时,会不会有效率的问题存在.
还有就是有必要把oo和er分的那么清楚吗?
不管白猫还是黑猫,抓住老鼠就是好猫.我们既然用数据库作存储介质,就应该充分利用数据库的优势,不是吗?不然的话,我们何不用文件存储好了.
请多多指教.
caoxggmail
Newbie
Joined: 25 Feb 2005
Posts: 42
Location: Nanjing,China
10 credits (What‘s this?)


Posted: Fri Jun 24, 2005 10:09 am    Post subject:
jweban wrote:
你是不是说,能用对象实现的逻辑尽量通过对象来处理,这样就保证了访问db的一致性.
可是话说回来,本来sql语句就能实现的东西,非要通过oo的东西在处理一遍的话好吗?那么我们用db是不是用的功能也太简单了吧.毕竟oracle也好sqlserver也好,都很容易处理复杂查询.同时,会不会有效率的问题存在.
还有就是有必要把oo和er分的那么清楚吗?
不管白猫还是黑猫,抓住老鼠就是好猫.我们既然用数据库作存储介质,就应该充分利用数据库的优势,不是吗?不然的话,我们何不用文件存储好了.
请多多指教.
有几个好处。首先是,数据库非绑定。大多数应用程序都是OLTP型程序,也就是说,你业务的核心就是在于你的模型定义,至于具体用什么数据库来实现,是无关紧要的。假若你能够实现数据库无关,你的产品能跑在多个数据库平台上,这岂不是很好?用SQL直接计算,就有这方面的坏处,比如,对日期格式的处理,很多数据库都有自己的处理方法,对BLOB也是一样,甚至oracle有些版本是用+=表示left join连接关系的,你很难在数据库之间移植。
相反的是数据仓库型程序,这种程序关心的是从数据库中压榨出分析数据来,此时对时间、对效率要求就很高,这种情况下,利用数据库的特性往往更有用,这就不一定是hibernate或者说or mapping的适应范围了。
第二个好处就是可测试性。TDD告诉我们,不可测试的程序一定不是好程序,好程序要尽量的可测试,而且是可以快速测试。把逻辑建立在数据库中,这就难于测试。假若逻辑都是建立在对象中,比如我要实现按照不同工资标准计算个人所得税,那么我可以简单的写一个测试用例,new一个计算,给一些测试数据,半段测试结果是否正确,在测试过程中根本无需数据库,因为这个逻辑本来就是和具体数据库无关的;你用SQL实现,你就无法很容易的做到这种简单的自动化测试,你必须每次启动一个db2或者sql server起来。
要说起来好处简直是太多啦,先说这两个最明显的。
_________________
你可以做你想做的任何事情,不过要做好为此付出代价的准备。
Post rating: This posting has not been rated so far.
jweban
Newbie
Joined: 18 May 2005
Posts: 7
10 credits (What‘s this?)

Posted: Mon Jun 27, 2005 12:42 pm    Post subject:
对于复杂的业务来说,总会有某些处理业务逻辑很复杂,这时对于效率的要求就非常必须了.(我目前从事的业务就有这种问题),用对象进行处理的话,如果数据量非常大,就可能导致多次访问db,从而效率非常低.
然而,也仅仅是个别情况如此,所以我还是希望用hibernate.
请问这种情况如何处理?谢谢.
jweban
Newbie
Joined: 18 May 2005
Posts: 7
10 credits (What‘s this?)

Posted: Mon Jun 27, 2005 12:43 pm    Post subject:
对于复杂的业务来说,总会有某些处理业务逻辑很复杂,这时对于效率的要求就非常必须了.(我目前从事的业务就有这种问题),用对象进行处理的话,如果数据量非常大,就可能导致多次访问db,从而效率非常低.
然而,也仅仅是个别情况如此,所以我还是希望用hibernate.
请问这种情况如何处理?谢谢.
caoxggmail
Newbie
Joined: 25 Feb 2005
Posts: 42
Location: Nanjing,China
10 credits (What‘s this?)


Posted: Tue Jun 28, 2005 1:30 pm    Post subject:
对瓶颈部分的性能优化,hibernate一样支持native SQL,这时候你也可以随心所欲的用你的SQL了
_________________
你可以做你想做的任何事情,不过要做好为此付出代价的准备。
Post rating: This posting has not been rated so far.
Display posts from previous: All Posts 1 Day 7 Days 2 Weeks 1 Month 3 Months 6 Months 1 Year   Oldest First Newest First  
Page 1 of 1   
| Previous |Next
phpBB
_xyz