SQLServerException: недопустимое имя столбца [дубликат]

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
15
задан lucas 17 December 2008 в 22:28
поделиться

9 ответов

Вот возможное обходное решение: если вы назовете его dateofbirth, столбец в БД будет назван так, но имя атрибута должно быть одинаковым.

Hibernate принимает формат верблюда создавать / читать столбцы базы данных.

У меня была эта проблема раньше. Я работал с устаревшими колонками, где не было места в именах столбцов «employeename», «employeerole», «departmentlocation». Я ненавижу это, потому что все свойства моей бобы должны были быть без верблюжьего случая.

Столбцы базы данных, разделенные символом «_», будут использоваться для правильного отображения camelCase, как вы только что видели.

5
ответ дан Nathaniel Ford 26 August 2018 в 18:14
поделиться

Вы можете аннотировать любые поля или методы getter, это не имеет значения. Можете ли вы опубликовать полный файл hibernate.cfg.xml или persistence.xml?

1
ответ дан cliff.meyers 26 August 2018 в 18:14
поделиться

FYI: Причина вставки подчеркивания, вероятно, связана с тем, что вы используете ImprovedNamingStrategy . Он настроен на ваш объект Configuration . См. здесь для примера ...

Если вы не хотите подчеркивания, вы можете просто не устанавливать стратегию именования или устанавливать его в ранее найденную ранее DefaultNamingStrategy.

24
ответ дан Dan Vinton 26 August 2018 в 18:14
поделиться
  • 1
    Это и есть причина этой проблемы. Работает как прелесть для меня. – Charles Morin 26 September 2014 в 15:24

Я не уверен на 100%, но вам не нужно комментировать метод get, а не частную переменную?

0
ответ дан davetron5000 26 August 2018 в 18:14
поделиться
  • 1
    Я так не думаю? По крайней мере, я могу указать такие вещи, как длина на уровне переменной экземпляра, и соответственно изменят столбцы. – lucas 17 December 2008 в 22:38
  • 2
    Вы можете аннотировать любой из них, но вы должны последовательно их аннотировать. Если вы смешиваете их и комментируете некоторые заголовки и некоторые геттеры, он найдет один и игнорирует другой. – Nathan Kummer 5 December 2015 в 12:04

добавить свойство ниже в случае загрузки весны.

spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming .physical-стратегия = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

1
ответ дан JavaDev 26 August 2018 в 18:14
поделиться

У 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
       }
   }
4
ответ дан jonsca 26 August 2018 в 18:14
поделиться
  • 1
    Я бы предложил также вызов "super (tableName) & quot; на любых таблицах вам не понадобится ваше специальное соглашение ... возможно – willsteel 15 October 2012 в 17:41

Обходным решением было использование @Column (name = "dateofbirth"), который работал для моих целей.

2
ответ дан lucas 26 August 2018 в 18:14
поделиться
  • 1
    Вы говорите, что единственное изменение, которое вы сделали, было в капитализации? – Matt Solnit 17 December 2008 в 23:24
  • 2
    Да. Кажется, что ImprovedNamingStrategy был исполнителем, который видит имена столбцов на камкорде и конвертирует в нижний регистр + подчеркивания. Ошибка или функция, вы решаете. – lucas 18 December 2008 в 17:54
  • 3
    Пробовал это. Это сработало. – Maverick 2 June 2018 в 19:38

Попробуйте поместить это в

application.properties

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
8
ответ дан Rahul Singh 26 August 2018 в 18:14
поделиться

Поместите аннотацию @Column на геттер:

@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
6
ответ дан Ryan Anderson 26 August 2018 в 18:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: