2013-04-16 63 views
0

我已经使用注释创建的域对象,现在我需要写来获取一些SQL查询/插入/自/至多个表更新数据。命名SQL查询

有没有办法仅保留SQL查询中的hbm.xml文件命名查询,因为使用注释已经创建的域对象,我也不需要做的是在XML方式。如果可能,那么需要遵循哪些步骤,请咨询。

在此先感谢。

回答

2

是的,你可以使用波纹管标记在XML文件中

<sql-query name="Myquery"> 
    select * from YourTableName 
</sql-query> 

检查这个例子 http://www.java4s.com/hibernate/example-on-hibernate-named-queries/

+0

我的目标是使用具有名称查询xml的带注释的域对象,如何实现此目的?请帮忙。 –

+0

解决。您需要将表中的所有列放入select子句中,即使您只需要很少的列,因为它会填充完整的域对象。 –

2

中的hbm.xml首先定义一个SQL查询,如:

<sql-query name="persons"> 
    <return alias="person" class="eg.Person"/> 
Select person.NAME AS {person.name},person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person Where person.NAME LIKE :namePattern 
</sql-query> 

然后由statment的名字取,

List people = sess.getNamedQuery("persons").setString("namePattern" ,namePattern) 
.setMaxResults(50) 
.list(); 

的另一种方式,则SQL查询元素是不需要的,直接写Java代码:

名单猫= sess.createSQLQuery(

"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id ") 
.addEntity("cat" , Cat. class)   // add entity 
.addJoin("kitten" , "cat.kittens ") // add related entity 
.list(); 

也许帮助你:)

+0

我有一个XML文件中使用命名查询,这里是查询:SELECT appl.applicant_id为applicantId, \t appl.airport_id为airportId, \t appl.first_name的名字, \t appl.ssn作为SSN FROM申请人申请,enroll_request注册 WHERE enroll.applicant_id = appl.applicant_id \t和enroll.application_id =:的applicationID。我的XML文件应该如何? –

+0

这是我在其中引发错误的XML项: <冬眠映射> \t <进口类= “com.dtis.dac.domain.Applicant”/> \t <进口类=“com.dtis.dac。 domain.EnrollmentRequest “/> \t \t <查询名称=” getUniqueApplicant“> <![CDATA [ \t \t \t SELECT appl.applicant_id如applicantId, \t \t \t \t appl.airport_id如airportId, \t \t \t \t appl.first_name如名字, \t \t \t \t appl.ssn作为SSN \t \t \t FROM申请人申请,enroll_request注册 \t \t \t WHERE enroll.applicant_id =申请applicant_id \t \t \t和enroll.application_id =:的applicationID \t \t]]> \t

+0

我有此查询打印在consode:休眠: SELECT appl.applicant_id如applicantId, 申请.airport_id如airportId, appl.first_name如名字, appl.ssn作为SSN FROM 申请人申请, enroll_request注册 WHERE 登记.applicant_id = appl.applicant_id and enroll.application_id =?当我使用数据库编辑器(如SQL服务器mngmnt studio)测试它时会起作用,但会失败地说:org.hibernate.exception.SQLGrammarException:无效的列名称applicant_id。请帮帮我。 –