Я работаю над проектом, и у меня есть «странное» отображение для управления.
Неважно, это структура:
Элемент состоит из одного FK, состоящего из cmpcode, elmlevel и code
Счет состоит из cmpcode, element2 (который является элементом уровня 2, с тем же самым cmpcode), element3 (который является элементом уровня 3, с тем же самым cmpcode)
Таким образом, таблица INVOICE имеет 4 столбца
Мое сопоставление для класса Invoice.java:
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "CMPCODE")
private Company company;
// This one does the mapping to Element, by forcing ELMLEVEL at 2, and using CMPCODE and EL2 for the rest of the mapping
@ManyToOne
@JoinColumnsOrFormulas({ @JoinColumnOrFormula(formula = @JoinFormula(value = "2", referencedColumnName = "ELMLEVEL")),
@JoinColumnOrFormula(column = @JoinColumn(name = "CMPCODE", referencedColumnName = "CMPCODE", insertable = false, updatable = false)),
@JoinColumnOrFormula(column = @JoinColumn(name = "EL2", referencedColumnName = "CODE")) })
private Element element2;
// This on is used to be able to set el2 (because we can't in the property above)
private String el2;
@ManyToOne
@JoinColumnsOrFormulas({ @JoinColumnOrFormula(formula = @JoinFormula(value = "3", referencedColumnName = "ELMLEVEL")),
@JoinColumnOrFormula(column = @JoinColumn(name = "CMPCODE", referencedColumnName = "CMPCODE", insertable = false, updatable = false)),
@JoinColumnOrFormula(column = @JoinColumn(name = "EL3", referencedColumnName = "CODE")) })
private Element element3;
private String el3;
Если я сделаю один запрос, он будет работать нормально.
Если я выполняю запрос с разбиением на страницы, сгенерированный запрос генерирует неоднозначный запрос столбца.
Почему?
Поскольку единственный запрос:
SELECT ID, CMPCODE, ELMLEVEL_1, CMPCODE_1, EL2_1, EL2_1, ELMLEVEL_2, CMPCODE_2, EL3_1, EL3_1 from INVOICE
Как вы видите, EL2_1 встречается 2 раза, потому что он в 2 свойствах: тот, который является строкой, и тот, который является элементом.
Для одного запроса нет проблем.
Но теперь я делаю запрос на нумерацию страниц:
select * from (SELECT ID, CMPCODE, ELMLEVEL_1, CMPCODE_1, EL2_1, EL2_1, ELMLEVEL_2, CMPCODE_2, EL3_1, EL3_1 from INVOICE) where rownum<10
Выдается неоднозначная ошибка.
Я застрял на нем с 3 дней.
Что мне делать?
Если я удаляю строку el2, я просто не могу больше ее обновлять (из-за вставляемого / обновляемого false).
Если я удаляю вставляемое / обновляемое значение false, у меня возникает повторное исключение столбца.
Примечание: я упростил модель, но у меня есть element2 к element8