Мне было легче:
1) создать функцию, которая будет проверять, находится ли элемент где-либо в родительской иерархии другого. Что-то вроде этого (я не буду писать функцию, сделаю ее с WHILE DO):
is_related(id, parent_id);
в вашем примере
is_related(21, 19) == 1;
is_related(20, 19) == 1;
is_related(21, 18) == 0;
2) используйте подвыбор, что-то например:
select ...
from table t
join table pt on pt.id in (select i.id from table i where is_related(t.id,i.id));
Вот возможное обходное решение: если Вы называете его dateofbirth
столбец в DB назвали бы как этот, но название атрибута должно быть тем же.
Будьте в спящем режиме берет формат Camel-регистра для создавания/читавшего столбцов базы данных.
У меня была эта проблема прежде. Я работал со столбцы прежней версии, где не было никакого пространства в именах столбцов "employeename", "employeerole", "departmentlocation". Я ненавижу его, потому что все мои бобовые свойства должны были быть без Camel-регистра.
Столбцы базы данных, разделенные "_", привыкнут к правильно Camel-регистру, как Вы только что видели.
К вашему сведению: причина вставки символов нижнего подчеркивания состоит, вероятно в том, потому что Вы используете ImprovedNamingStrategy. Это установлено на Вашем объекте Конфигурации. Посмотрите здесь для примера...
Если Вы не хотите символы нижнего подчеркивания, Вы не можете просто установить стратегию именования или установить ее на DefaultNamingStrategy, который Вы обнаружили ранее.
Поместите @Column аннотацию на метод считывания:
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
Я не на 100% уверен, но разве Вы не должны аннотировать получить метод и не частную переменную?
Предложенное обходное решение должно было использовать @Column (имя = "dateofbirth"), который работал на мои цели.
Можно аннотировать или поля или методы получателя, это не имеет значения. Можно ли отправить полный файл hibernate.cfg.xml или persistence.xml?