hibernate.globally_quoted_identifiers
或
hibernate.keyword_auto_quoting_enabled
keyword_auto_quoting_enabled
自动为保留关键字添加引号。
"BOOLEAN"
或
"UUID"
在postgresql中。所以我修改了物理命名策略。
hibernate.naming.physical-strategy = com.mypackage.MyCustomPhysicalNamingStrategyImpl
public class MyCustomPhysicalNamingStrategyImpl implements PhysicalNamingStrategy, Serializable {
public static final MyCustomPhysicalNamingStrategyImpl INSTANCE = new MyCustomPhysicalNamingStrategyImpl();
@Override
public Identifier toPhysicalCatalogName(final Identifier name, final JdbcEnvironment context) {
return new Identifier(name.getText(), true);
}
@Override
public Identifier toPhysicalSchemaName(final Identifier name, final JdbcEnvironment context) {
return new Identifier(name.getText(), true);
}
@Override
public Identifier toPhysicalTableName(final Identifier name, final JdbcEnvironment context) {
return new Identifier(name.getText(), true);
}
@Override
public Identifier toPhysicalSequenceName(final Identifier name, final JdbcEnvironment context) {
return new Identifier(name.getText(), true);
}
@Override
public Identifier toPhysicalColumnName(final Identifier name, final JdbcEnvironment context) {
return new Identifier(name.getText(), true);
}
}
Hibernate不会修改列定义,而是保持表和列名不变。
示例实体:
@Data
@Entity
@Table(name = "CHAT")
public class Chat {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private long id;
@Column(name = "UUID", columnDefinition = "UUID", nullable = false, length = 16)
private UUID uuid;
@Column(name = "NAME", length = 16)
private String name;
}
命名将按原样进行:
CHAT
------------
ID
UUID
NAME
更新:Hibernate5.2已经发布
GLOBALLY_QUOTED_IDENTIFIERS_SKIP_COLUMN_DEFINITIONS