类org.hibernate.NullPrecedence源码实例Demo

下面列出了怎么用org.hibernate.NullPrecedence的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: lams   文件: MySQLDialect.java
@Override
public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls) {
	final StringBuilder orderByElement = new StringBuilder();
	if ( nulls != NullPrecedence.NONE ) {
		// Workaround for NULLS FIRST / LAST support.
		orderByElement.append( "case when " ).append( expression ).append( " is null then " );
		if ( nulls == NullPrecedence.FIRST ) {
			orderByElement.append( "0 else 1" );
		}
		else {
			orderByElement.append( "1 else 0" );
		}
		orderByElement.append( " end, " );
	}
	// Nulls precedence has already been handled so passing NONE value.
	orderByElement.append( super.renderOrderByElement( expression, collation, order, NullPrecedence.NONE ) );
	return orderByElement.toString();
}
 
源代码2 项目: lams   文件: SQLServer2008Dialect.java
@Override
public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls) {
	final StringBuilder orderByElement = new StringBuilder();

	if ( nulls != null && !NullPrecedence.NONE.equals( nulls ) ) {
		// Workaround for NULLS FIRST / LAST support.
		orderByElement.append( "case when " ).append( expression ).append( " is null then " );
		if ( NullPrecedence.FIRST.equals( nulls ) ) {
			orderByElement.append( "0 else 1" );
		}
		else {
			orderByElement.append( "1 else 0" );
		}
		orderByElement.append( " end, " );
	}

	// Nulls precedence has already been handled so passing NONE value.
	orderByElement.append( super.renderOrderByElement( expression, collation, order, NullPrecedence.NONE ) );

	return orderByElement.toString();
}
 
源代码3 项目: lams   文件: DB2Dialect.java
/**
 * Handle DB2 "support" for null precedence...
 *
 * @param expression The SQL order expression. In case of {@code @OrderBy} annotation user receives property placeholder
 * (e.g. attribute name enclosed in '{' and '}' signs).
 * @param collation Collation string in format {@code collate IDENTIFIER}, or {@code null}
 * if expression has not been explicitly specified.
 * @param order Order direction. Possible values: {@code asc}, {@code desc}, or {@code null}
 * if expression has not been explicitly specified.
 * @param nullPrecedence Nulls precedence. Default value: {@link NullPrecedence#NONE}.
 *
 * @return
 */
@Override
public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nullPrecedence) {
	if ( nullPrecedence == null || nullPrecedence == NullPrecedence.NONE ) {
		return super.renderOrderByElement( expression, collation, order, NullPrecedence.NONE );
	}

	// DB2 FTW!  A null precedence was explicitly requested, but DB2 "support" for null precedence
	// is a joke.  Basically it supports combos that align with what it does anyway.  Here is the
	// support matrix:
	//		* ASC + NULLS FIRST -> case statement
	//		* ASC + NULLS LAST -> just drop the NULLS LAST from sql fragment
	//		* DESC + NULLS FIRST -> just drop the NULLS FIRST from sql fragment
	//		* DESC + NULLS LAST -> case statement

	if ( ( nullPrecedence == NullPrecedence.FIRST  && "desc".equalsIgnoreCase( order ) )
			|| ( nullPrecedence == NullPrecedence.LAST && "asc".equalsIgnoreCase( order ) ) ) {
		// we have one of:
		//		* ASC + NULLS LAST
		//		* DESC + NULLS FIRST
		// so just drop the null precedence.  *NOTE: we could pass along the null precedence here,
		// but only DB2 9.7 or greater understand it; dropping it is more portable across DB2 versions
		return super.renderOrderByElement( expression, collation, order, NullPrecedence.NONE );
	}

	return String.format(
			Locale.ENGLISH,
			"case when %s is null then %s else %s end, %s %s",
			expression,
			nullPrecedence == NullPrecedence.FIRST ? "0" : "1",
			nullPrecedence == NullPrecedence.FIRST ? "1" : "0",
			expression,
			order
	);
}
 
源代码4 项目: lams   文件: Dialect.java
/**
 * Renders an ordering fragment
 *
 * @param expression The SQL order expression. In case of {@code @OrderBy} annotation user receives property placeholder
 * (e.g. attribute name enclosed in '{' and '}' signs).
 * @param collation Collation string in format {@code collate IDENTIFIER}, or {@code null}
 * if expression has not been explicitly specified.
 * @param order Order direction. Possible values: {@code asc}, {@code desc}, or {@code null}
 * if expression has not been explicitly specified.
 * @param nulls Nulls precedence. Default value: {@link NullPrecedence#NONE}.
 * @return Renders single element of {@code ORDER BY} clause.
 */
public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls) {
	final StringBuilder orderByElement = new StringBuilder( expression );
	if ( collation != null ) {
		orderByElement.append( " " ).append( collation );
	}
	if ( order != null ) {
		orderByElement.append( " " ).append( order );
	}
	if ( nulls != NullPrecedence.NONE ) {
		orderByElement.append( " nulls " ).append( nulls.name().toLowerCase( Locale.ROOT ) );
	}
	return orderByElement.toString();
}
 
源代码5 项目: lams   文件: OrderByFragmentRenderer.java
@Override
protected String renderOrderByElement(String expression, String collation, String order, String nulls) {
	final NullPrecedence nullPrecedence = NullPrecedence.parse(
			nulls,
			sessionFactory.getSessionFactoryOptions().getDefaultNullPrecedence()
	);
	return sessionFactory.getDialect().renderOrderByElement( expression, collation, order, nullPrecedence );
}
 
源代码6 项目: lams   文件: SqlGenerator.java
@Override
protected String renderOrderByElement(String expression, String order, String nulls) {
	final NullPrecedence nullPrecedence = NullPrecedence.parse( nulls,
																sessionFactory.getSettings()
																		.getDefaultNullPrecedence()
	);
	return sessionFactory.getDialect().renderOrderByElement( expression, null, order, nullPrecedence );
}
 
@Test
public final void whenCriteriaSortingStringNullsLastAsc_thenNullsLast() {
    final Criteria criteria = session.createCriteria(Foo.class, "FOO");
    criteria.addOrder(Order.asc("name").nulls(NullPrecedence.LAST));
    final List<Foo> fooList = criteria.list();
    assertNull(fooList.get(fooList.toArray().length - 1).getName());
    for (final Foo foo : fooList) {
        System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName());
    }
}
 
@Test
public final void whenCriteriaSortingStringNullsFirstDesc_thenNullsFirst() {
    final Criteria criteria = session.createCriteria(Foo.class, "FOO");
    criteria.addOrder(Order.desc("name").nulls(NullPrecedence.FIRST));
    final List<Foo> fooList = criteria.list();
    assertNull(fooList.get(0).getName());
    for (final Foo foo : fooList) {
        System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName());
    }
}
 
源代码9 项目: lams   文件: Settings.java
public NullPrecedence getDefaultNullPrecedence() {
	return sessionFactoryOptions.getDefaultNullPrecedence();
}
 
@Override
public NullPrecedence getDefaultNullPrecedence() {
	return delegate.getDefaultNullPrecedence();
}
 
@Override
public T applyDefaultNullPrecedence(NullPrecedence nullPrecedence) {
	delegate.applyDefaultNullPrecedence( nullPrecedence );
	return getThis();
}
 
源代码12 项目: lams   文件: SessionFactoryOptionsBuilder.java
@Override
public NullPrecedence getDefaultNullPrecedence() {
	return defaultNullPrecedence;
}
 
源代码13 项目: lams   文件: SessionFactoryOptionsBuilder.java
public void applyDefaultNullPrecedence(NullPrecedence nullPrecedence) {
	this.defaultNullPrecedence = nullPrecedence;
}
 
源代码14 项目: lams   文件: SessionFactoryBuilderImpl.java
@Override
public SessionFactoryBuilder applyDefaultNullPrecedence(NullPrecedence nullPrecedence) {
	this.optionsBuilder.applyDefaultNullPrecedence( nullPrecedence );
	return this;
}
 
源代码15 项目: keycloak   文件: DelegatingDialect.java
@Override
public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls) {
    return getInstance().renderOrderByElement(expression, collation, order, nulls);
}
 
源代码16 项目: lams   文件: Order.java
/**
 * Defines precedence for nulls.
 *
 * @param nullPrecedence The null precedence to use
 *
 * @return {@code this}, for method chaining
 */
public Order nulls(NullPrecedence nullPrecedence) {
	this.nullPrecedence = nullPrecedence;
	return this;
}
 
源代码17 项目: lams   文件: SessionFactoryBuilder.java
/**
 * Apply a null precedence (NULLS FIRST, NULLS LAST) to be applied order-by clauses rendered into
 * SQL queries.
 *
 * @param nullPrecedence The default null precedence to use.
 *
 * @return {@code this}, for method chaining
 *
 * @see org.hibernate.cfg.AvailableSettings#DEFAULT_NULL_ORDERING
 */
SessionFactoryBuilder applyDefaultNullPrecedence(NullPrecedence nullPrecedence);
 
源代码18 项目: lams   文件: SessionFactoryOptions.java
NullPrecedence getDefaultNullPrecedence(); 
 类所在包
 类方法
 同包方法