Hibernate——HQL

 

线程超时

setTimeout( 2 )

写入L2缓存,但不要读取它们 

setCacheMode( CacheMode.REFRESH )

为SessionFactory启用了查询缓存

setCacheable( true )

 如果通过hibernate.use_sql_comments配置属性启用,则为生成的SQL添加注释

setComment( "+ INDEX(p idx_person_name)" );

设置参数 

setParameter

获取一条数据

uniqueResult();

 使用游标查询

try ( ScrollableResults scrollableResults = session.createQuery(
		"select p " +
		"from Person p " +
		"where p.name like :name" )
		.setParameter( "name", "J%" )
		.scroll()
) {
	while(scrollableResults.next()) {
		Person person = (Person) scrollableResults.get()[0];
		process(person);
	}
}

由于这种形式使JDBC保持ResultSet打开状态,因此应用程序应该ScrollableResults通过调用其close()方法来指示何时完成(因为它将继承,java.io.Closeable 因此ScrollableResults可以使用try-with-resources块)。如果未被应用程序保持关闭,Hibernate将自动关闭当前事务结束时(提交或回滚)内部使用的底层资源(例如ResultSet和)。PreparedStatementScrollableResults,但是,最好ScrollableResults明确地关闭它。

执行更新语句,可以在insert,update,delete语句中使用

executeUpdate();

使用多个根实体引用的简单查询

List<Object[]> persons = entityManager.createQuery(
	"select distinct pr, ph " +
	"from Person pr, Phone ph " +
	"where ph.person = pr and ph is not null", Object[].class)
.getResultList();

这里要注意一个地方,当使用Object[].class为传入的对象时,createQuery方法会遍历所有对应的实体类,如上图所示,select语句中有两个对象,Person 和Phone 通过传入的Object[].class获取到了对应的Person.class和Phone.class并通过相应的实体获取到相应的参数进行对比判断从而查询出自己想要的值

 

猜你喜欢

转载自blog.csdn.net/qq_40929531/article/details/85247406