hibernate4.3获得session的方法 ,并且测试查询两个相关表

hibenate4.3获得session的方式有所改变,用之前的方法将会提示过期的方法

正确的获取session的方法如下:

public static Configuration config = new Configuration();
public static SessionFactory sessionFactory;
public static String config_file = "/hibernate.cfg.xml";
	
public static void main(String[] args) {
	// 获得配置文件
	config.configure(config_file);
	
	StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();

	sessionFactory = config.buildSessionFactory(serviceRegistry);
	Session session = sessionFactory.openSession();
以上为代码片段,获得session前需要首先注册一个Service ,创建session工厂的时候就用该service来作为参数来创建即可


接下来我们说说hibernate的连接查询

首先请看以下两条语句

//String sql="select s1.* from student s1 left join grade g1 on s1.gid=g1.gid";
		
String hql="select s1,g1.gname,g1.gdesc from student s1,grade g1 where s1.gid=g1.gid";
被我注释掉的这行代码适用于sql查询,没有注释的代码适用于hibernate的hql查询


继续看以下代码:

//query = session.createSQLQuery(sql).addEntity(Student.class);
query = session.createQuery(hql);
正如你看到的那样,使用sql语句来查询,如果要获得正常的实体对象,必须使用addEntity方法

而不能直接查询后强制转换,那样会报错的


接下来的代码就会变得非常简单了。使用sql语句查询的,直接

List list = query.list();	
Student s1 = (Student) list.get(0);
而使用hql查询的代码,你得这样做,因为他查询了一个实体和另外一个实体的部分字段,完整的代码如下:

List list = query.list();	
Object[] obj = (Object[]) list.get(0);

System.out.println("s1.sname="+((Student)obj[0]).getSname());
System.out.println("g1.sname="+obj[1]);
System.out.println("g1.sdesc="+obj[2]);
总结一下hibernate通过hql查询的三种情况:

第一:只查询一个字段,获得是一个object

第二:只查询一个实体,获得到的是一个对象

第三:查询多个字段,获得的是一个object[],长度为select后面展示的字段数


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img