下面列出了怎么用org.hibernate.dialect.PostgreSQL81Dialect的API类实例代码及写法,或者点击链接到github查看源代码。
@Test
@RequiresDialect({PostgreSQL81Dialect.class})
public void test() {
doInJPA( this::entityManagerFactory, entityManager -> {
DebitAccount debitAccount = new DebitAccount( "123-debit" );
debitAccount.setId( 1L );
debitAccount.setOwner( "John Doe" );
debitAccount.setBalance( BigDecimal.valueOf( 100 ) );
debitAccount.setInterestRate( BigDecimal.valueOf( 1.5d ) );
debitAccount.setOverdraftFee( BigDecimal.valueOf( 25 ) );
CreditAccount creditAccount = new CreditAccount( "456-credit" );
creditAccount.setId( 2L );
creditAccount.setOwner( "John Doe" );
creditAccount.setBalance( BigDecimal.valueOf( 1000 ) );
creditAccount.setInterestRate( BigDecimal.valueOf( 1.9d ) );
creditAccount.setCreditLimit( BigDecimal.valueOf( 5000 ) );
entityManager.persist( debitAccount );
entityManager.persist( creditAccount );
} );
doInJPA( this::entityManagerFactory, entityManager -> {
List<Account> accounts =
entityManager.createQuery( "select a from Account a" ).getResultList();
Assert.assertEquals( 2, accounts.size() );
} );
}
@Override
protected String[] getMappings() {
if ( PostgreSQL81Dialect.class.isAssignableFrom( getDialect().getClass() ) ) {
return new String[] { "org/hibernate/userguide/schema/SchemaGenerationTest.hbm.xml" };
}
return super.getMappings();
}
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) {
final Dialect dialect = criteriaQuery.getFactory().getDialect();
final String[] columns = criteriaQuery.findColumns( propertyName, criteria );
if ( columns.length != 1 ) {
throw new HibernateException( "ilike may only be used with single-column properties" );
}
if ( dialect instanceof PostgreSQLDialect || dialect instanceof PostgreSQL81Dialect) {
return columns[0] + " ilike ?";
}
else {
return dialect.getLowercaseFunction() + '(' + columns[0] + ") like ?";
}
}
public static EngineDecorator getEngineDecorator(String dialect) throws ClassNotFoundException {
Class<?> dialectClass = Class.forName(dialect);
if (MySQLDialect.class.isAssignableFrom(dialectClass)) {
return new MySQLDecorator();
} else if (PostgreSQL81Dialect.class.isAssignableFrom(dialectClass)) {
return new PostgreSQLDecorator();
} else if (Oracle8iDialect.class.isAssignableFrom(dialectClass)) {
return new OracleDecorator();
} else if (SQLServerDialect.class.isAssignableFrom(dialectClass)) {
return new SQLServerDecorator();
}
return new NoOpDecorator();
}
/**
* Perform an SQL INSERT, and then retrieve a generated identifier.
* <p>
* This form is used for PostInsertIdentifierGenerator-style ids (IDENTITY,
* select, etc).
*/
default CompletionStage<Serializable> insertReactive(
Object[] fields,
boolean[] notNull,
String sql,
Object object,
SharedSessionContractImplementor session) throws HibernateException {
if ( log.isTraceEnabled() ) {
log.tracev( "Inserting entity: {0}", infoString(delegate()) );
if ( delegate().isVersioned() ) {
log.tracev( "Version: {0}", Versioning.getVersion( fields, delegate()) );
}
}
Object[] params = PreparedStatementAdaptor.bind( insert -> {
boolean[][] insertable = delegate().getPropertyColumnInsertable();
delegate().dehydrate( null, fields, notNull, insertable, 0, insert, session, false );
} );
SessionFactoryImplementor factory = session.getFactory();
Dialect dialect = factory.getJdbcServices().getDialect();
String identifierColumnName = delegate().getIdentifierColumnNames()[0];
ReactiveConnection connection = getReactiveConnection(session);
if ( factory.getSessionFactoryOptions().isGetGeneratedKeysEnabled() ) {
//TODO: wooooo this is awful ... I believe the problem is fixed in Hibernate 6
if ( dialect instanceof PostgreSQL81Dialect) {
sql = sql + " returning " + identifierColumnName;
}
return connection.updateReturning( sql, params ).thenApply( id -> id );
}
else {
//use an extra round trip to fetch the id
String selectIdSql = dialect.getIdentityColumnSupport()
.getIdentitySelectString(
delegate().getTableName(),
identifierColumnName,
Types.INTEGER
);
return connection.update( sql, params )
.thenCompose( v -> connection.selectLong( selectIdSql, new Object[0] ) )
.thenApply( id -> id );
}
}
@Test
@RequiresDialect( PostgreSQL81Dialect.class )
public void testPostgres() {
}
private void addDialects(StrategySelectorImpl strategySelector) {
addDialect( strategySelector, Cache71Dialect.class );
addDialect( strategySelector, CUBRIDDialect.class );
addDialect( strategySelector, DB2Dialect.class );
addDialect( strategySelector, DB2390Dialect.class );
addDialect( strategySelector, DB2390V8Dialect.class );
addDialect( strategySelector, DB2400Dialect.class );
addDialect( strategySelector, DerbyTenFiveDialect.class );
addDialect( strategySelector, DerbyTenSixDialect.class );
addDialect( strategySelector, DerbyTenSevenDialect.class );
addDialect( strategySelector, FirebirdDialect.class );
addDialect( strategySelector, FrontBaseDialect.class );
addDialect( strategySelector, H2Dialect.class );
addDialect( strategySelector, HANAColumnStoreDialect.class );
addDialect( strategySelector, HANARowStoreDialect.class );
addDialect( strategySelector, HSQLDialect.class );
addDialect( strategySelector, InformixDialect.class );
addDialect( strategySelector, IngresDialect.class );
addDialect( strategySelector, Ingres9Dialect.class );
addDialect( strategySelector, Ingres10Dialect.class );
addDialect( strategySelector, InterbaseDialect.class );
addDialect( strategySelector, JDataStoreDialect.class );
addDialect( strategySelector, MckoiDialect.class );
addDialect( strategySelector, MimerSQLDialect.class );
addDialect( strategySelector, MySQL5Dialect.class );
addDialect( strategySelector, MySQL5InnoDBDialect.class );
addDialect( strategySelector, MySQL57InnoDBDialect.class );
addDialect( strategySelector, MySQL57Dialect.class );
addDialect( strategySelector, Oracle8iDialect.class );
addDialect( strategySelector, Oracle9iDialect.class );
addDialect( strategySelector, Oracle10gDialect.class );
addDialect( strategySelector, PointbaseDialect.class );
addDialect( strategySelector, PostgresPlusDialect.class );
addDialect( strategySelector, PostgreSQL81Dialect.class );
addDialect( strategySelector, PostgreSQL82Dialect.class );
addDialect( strategySelector, PostgreSQL9Dialect.class );
addDialect( strategySelector, ProgressDialect.class );
addDialect( strategySelector, SAPDBDialect.class );
addDialect( strategySelector, SQLServerDialect.class );
addDialect( strategySelector, SQLServer2005Dialect.class );
addDialect( strategySelector, SQLServer2008Dialect.class );
addDialect( strategySelector, Sybase11Dialect.class );
addDialect( strategySelector, SybaseAnywhereDialect.class );
addDialect( strategySelector, SybaseASE15Dialect.class );
addDialect( strategySelector, SybaseASE157Dialect.class );
addDialect( strategySelector, TeradataDialect.class );
addDialect( strategySelector, TimesTenDialect.class );
}