我知道有關於此的幾個線程,但我不明白爲什麼它不處理我的代碼。我擁有大寫字母,列,表名,序列的整個數據庫。但是當我嘗試通過sql
或criteria
進行查詢時,它會將所有值轉換爲小寫。我發現了一個解決方法,但我不想寫這樣的查詢:Hibernate 5命名策略postgresql
select a."COLUMN_1", a."COLUMN_2" from schema."A" a
和映射,如:
@Entity(name = "`A`")
public class A implements Serializable {
@Column(name = "`COLUMN_1`")
private Integer column1;
@Column(name = "`COLUMN_2`")
private Integer column2;
}
我試圖按照計算器一些線程實現我自己的命名策略,但它都不起作用。
public class ModifiedImprovedNamingStrategy extends PhysicalNamingStrategyStandardImpl{
@Override
public final Identifier toPhysicalColumnName(final Identifier name, final JdbcEnvironment context) {
return new Identifier(addUnderscores(name.getText()), name.isQuoted());
}
/**
* Adds the underscores.
*
* @param name
* the name
* @return the string
*/
protected static String addUnderscores(final String name) {
final StringBuilder buf = new StringBuilder(name.replace('.', '_'));
for (int i = 1; i < (buf.length() - 1); i++) {
if (Character.isLowerCase(buf.charAt(i - 1))
&& Character.isUpperCase(buf.charAt(i))
&& Character.isLowerCase(buf.charAt(i + 1))) {
buf.insert(i++, '_');
}
}
return "`" + buf.toString().toUpperCase(Locale.ROOT) + "`";
}
}
,然後調用它在我的applicationContext這樣的:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="packagesToScan" value="com.services.vo"/>
<property name="mappingLocations">
<list>
<value>classpath*:hibernate/queries/**.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.transaction.coordinator_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
<prop key="hibernate.physical_naming_strategy">com.services.util.hibernate.ModifiedImprovedNamingStrategy</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
我的目的是爲了避免到處寫的。我試圖在覆蓋ModifiedImprovedNamingStrategy方法中設置一個斷點。當我嘗試一個單元測試時,它並沒有停在那裏。有沒有辦法做到我想要的?還是我會被迫保留這些?
在此先感謝
相關:https://stackoverflow.com/questions/32437202/improvednamingstrategy-no-longer-working-in-hibernate-5 –
這些反引號對於Postgres標識符無效,以 –
開頭「*我的整個數據庫都是大寫字母*」 - 你爲什麼這麼做?最好的辦法是不要使用雙引號標識符。在創建它們時(它定義了你以後需要如何訪問這些名稱)。 –