我已经使用注释创建了域对象,现在我需要编写一些 sql 查询来从/向多个表中获取/插入/更新数据。
有没有办法只保留 hbm.xml 文件中的 sql 查询作为命名查询,因为域对象已经使用注释创建,我不需要以 xml 方式进行。如果这是可能的,那么需要遵循哪些步骤,请指教。
提前致谢。
我已经使用注释创建了域对象,现在我需要编写一些 sql 查询来从/向多个表中获取/插入/更新数据。
有没有办法只保留 hbm.xml 文件中的 sql 查询作为命名查询,因为域对象已经使用注释创建,我不需要以 xml 方式进行。如果这是可能的,那么需要遵循哪些步骤,请指教。
提前致谢。
是的,您可以在 xml 文件中使用波纹管标签
<sql-query name="Myquery">
select * from YourTableName
</sql-query>
检查此示例 http://www.java4s.com/hibernate/example-on-hibernate-named-queries/
首先在 hbm.xml 中定义一个 sql-query,如:
<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>
然后通过语句的名称获取它:
List people = sess.getNamedQuery("persons").setString("namePattern" ,namePattern)
.setMaxResults( 50 )
.list();
另一种方式,不需要sql-query元素,直接写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();
也许对你有帮助:)