SELECT * FROM myTable
WHERE col1 REGEXP '^[+-]?[0-9]*([0-9]\\.|[0-9]|\\.[0-9])[0-9]*(e[+-]?[0-9]+)?$'
Также будет соответствовать десятичным знакам (например, -1.2, +0.2, 6., 2e9, 1.2e-10 ).
Тест:
drop table if exists myTable;
create table myTable (col1 varchar(50));
insert into myTable (col1)
values ('00.00'),('+1'),('.123'),('-.23e4'),('12.e-5'),('3.5e+6'),('a'),('e6'),('+e0');
select
col1,
col1 + 0 as casted,
col1 REGEXP '^[+-]?[0-9]*([0-9]\\.|[0-9]|\\.[0-9])[0-9]*(e[+-]?[0-9]+)?$' as isNumeric
from myTable;
Результат:
col1 | casted | isNumeric
-------|---------|----------
00.00 | 0 | 1
+1 | 1 | 1
.123 | 0,123 | 1
-.23e4 | -2300 | 1
12.e-5 | 0,00012 | 1
3.5e+6 | 3500000 | 1
a | 0 | 0
e6 | 0 | 0
+e0 | 0 | 0
Вот возможное обходное решение: если вы назовете его dateofbirth
, столбец в БД будет назван так, но имя атрибута должно быть одинаковым.
Hibernate принимает формат верблюда создавать / читать столбцы базы данных.
У меня была эта проблема раньше. Я работал с устаревшими колонками, где не было места в именах столбцов «employeename», «employeerole», «departmentlocation». Я ненавижу это, потому что все свойства моей бобы должны были быть без верблюжьего случая.
Столбцы базы данных, разделенные символом «_», будут использоваться для правильного отображения camelCase, как вы только что видели.
Вы можете аннотировать любые поля или методы getter, это не имеет значения. Можете ли вы опубликовать полный файл hibernate.cfg.xml или persistence.xml?
FYI: Причина вставки подчеркивания, вероятно, связана с тем, что вы используете ImprovedNamingStrategy . Он настроен на ваш объект Configuration . См. здесь для примера ...
Если вы не хотите подчеркивания, вы можете просто не устанавливать стратегию именования или устанавливать его в ранее найденную ранее DefaultNamingStrategy.
Я не уверен на 100%, но вам не нужно комментировать метод get, а не частную переменную?
добавить свойство ниже в случае загрузки весны.
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming .physical-стратегия = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
У ImprovedNamingStrategy есть метод addUnderscores (), который вызывается из tableName () и columnName (), вы можете реализовать свой собственный класс стратегии именования и переопределить их согласно вашему выбору
public class MyOwnNamingStrategy extends ImprovedNamingStrategy {
@Override
public String tableName(String tableName) {
//return addUnderscores(columnName); // skip this
return columnName; // if you want column name variable name same
//return changeAsYouWant(columnName); // as name sames
}
}
Обходным решением было использование @Column (name = "dateofbirth"), который работал для моих целей.
Попробуйте поместить это в
application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Поместите аннотацию @Column на геттер:
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}