用一个Demo来记录
建立二张表Book和Press
press:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: hibernate1
Target Host: localhost
Target Database: hibernate1
Date: 2015/5/27 22:13:25
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for hql_press
-- ----------------------------
CREATE TABLE `hql_press` (
`id` int(11) NOT NULL,
`address` varchar(255) default NULL,
`book_id` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `FKFCEED87AECB66CF` (`book_id`),
CONSTRAINT `FKFCEED87AECB66CF` FOREIGN KEY (`book_id`) REFERENCES `hql_book` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `hql_press` VALUES ('1', '广州', '1');
INSERT INTO `hql_press` VALUES ('2', '上海', '1');
INSERT INTO `hql_press` VALUES ('3', '北京', '1');
book:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: hibernate1
Target Host: localhost
Target Database: hibernate1
Date: 2015/5/27 22:13:17
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for hql_book
-- ----------------------------
CREATE TABLE `hql_book` (
`id` int(11) NOT NULL,
`name` varchar(255) default NULL,
`author` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `hql_book` VALUES ('1', '设计模式', '刘伟');
Book.java
package com.lx.domain;
import java.util.HashSet;
import java.util.Set;
public class Book{
private Integer id;
private String name;
private String author;
private Set press = new HashSet();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Set getPress() {
return press;
}
public void setPress(Set press) {
this.press = press;
}
}
Press.java
package com.lx.domain;
public class Press {
private int id;
private String address;
private Book book;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
}
Book.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.lx.domain.Book" table="hql_book">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="author" column="author" type="string"></property>
<set name="press" cascade="all" inverse="true">
<key column="book_id"></key>
<one-to-many class="com.lx.domain.Press"/>
</set>
</class>
</hibernate-mapping>
Press.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.lx.domain.Press" table="hql_press">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
<property name="address" column="address" type="string"></property>
<many-to-one name="book" column="book_id" class="com.lx.domain.Book"></many-to-one>
</class>
</hibernate-mapping>
测试代码:
package com.lx.test;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import com.lx.domain.Book;
import com.lx.domain.Press;
import com.lx.util.HibernateUtil;
/**
Hql语句查询
* @author Administrator
*
*/
public class HibernateTest {
@Test
public void testAdd()
{
SessionFactory factory= HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
Book book = new Book();
book.setAuthor("刘伟");
book.setName("设计模式");
Press press = new Press();
press.setAddress("北京");
press.setBook(book);
Press press2 = new Press();
press2.setAddress("上海");
press2.setBook(book);
Press press3 = new Press();
press3.setAddress("广州");
press3.setBook(book);
book.getPress().add(press);
book.getPress().add(press2);
book.getPress().add(press3);
session.save(book);
tx.commit();
}catch(Exception e)
{
System.out.println(e.getCause());
if(null != tx)
{
tx.rollback();
}
}finally{
session.close();
}
}
@Test
public void testQuery()
{
SessionFactory factory= HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
Book book = (Book)session.get(Book.class, 1);
Query query = session.createQuery("from Press p where p.book = :book");
//① query.setParameter("book", book, Hibernate.entity(Book.class));
//② query.setEntity("book", book);
//③
query = session.createFilter(book.getPress(), "where id >1");
List<Press> press = query.list();
for(int i=0; i<press.size(); i++)
{
System.out.println(press.get(i).getAddress());
}
tx.commit();
}catch(Exception e)
{
if(null != tx)
{
tx.rollback();
}
}finally{
session.close();
}
}
}
将用到了一些函数的API列在下面,以便查看
使用HQL主要是对集合进行查询。
Hibernate.entity(object):中间是可持久化类,联系到hibernate中累的几种状态。
query.setEntity("name", object) ,也必须为可持久化类