2016-01-07 3 views
0

У меня есть вопрос о соединении запросов в формате JPA. Когда я использую следующий кодJPA внутренний путь соединения не найден и свойство не найдено

SELECT cve from CubeValuesEntity cve inner join CubeConfigEntity cce 
    on cve.cubeConfigId=cce.cubeConfigId 

Я получаю QuerySyntaxException: путь ожидается для соединения! которые я считаю, что исправление для этой ошибки заключается в следующем

SELECT cve from CubeValuesEntity cve inner join cve.CubeConfigEntity cce 
    on cve.cubeConfigId=cce.cubeConfigId 

Однако я теперь получить QueryException: не удалось разрешить свойство: CubeConfigEntity , который не имеет никакого смысла.

Вот реальный код Java я использовал:

TypedQuery<CubeValuesEntity> query = em.createQuery(
    "SELECT cve from CubeValuesEntity cve inner join cve.CubeConfigEntity cce on cve.cubeConfigId=cce.cubeConfigId where " + "cce.cubeType = :cubeType 
    and cce.name = :name and cve.axisType = :axisType", CubeValuesEntity.class) 
    .setParameter("cubeType", cubeType).setParameter("name", name).setParameter("axisType", axisType); 

    return query.getResultList(); 

Вот мои объекты

public class CubeValuesEntity extends AbstractDomainObject { 
private static final long serialVersionUID = 1L; 

private int cubeValueId; 
private int cubeConfigId; 
private String axisType; 
private int axisNumber; 
private String axisLabel; 
private BigDecimal axisFactor; 


public class CubeConfigEntity extends AbstractDomainObject { 
private int cubeConfigId; 
private String cubeType; 
private String name; 
private String yAxisName; 
private Integer yAxisCubeSize; 
private String xAxisName; 
private Integer xAxisCubeSize; 
private String reductionType; 
private BigDecimal midLowRange; 
private BigDecimal midHighRange; 

Спасибо за вашу помощь.

+0

У вас есть столбец 'cv' в' CubeValuesEntity' таблицы? Если да, пожалуйста, измените псевдоним таблицы на 'cve' (и' cce' для 'CubeConfigEntity') для ясности. – Turophile

+0

«cv inner join cv.CubeConfigEntity» неверно, если у вас нет поля, называемого CubeConfigEntity, в «cv». Но тогда вы не представляете свои сущности ... –

+0

нет столбца cv, я отредактирую пример. – snafua

ответ

1

Я верю, что вы смешиваете JQL и SQL здесь.

Предполагая, что у вас есть XToOne соотношение между CubeValuesEntity и CubeConfigEntity, свойство с именем «cubeConfig»:

  • Забудь «на» ключевое слово - это SQL, это подразумевает пунктирным выражение, и это отображение
  • «не может решить свойство: CubeConfigEntity» кажется логичным, поскольку это имя сущности, а не свойство

Так, просто попробуйте это:

"SELECT cv from CubeValuesEntity cv inner join cv.cubeConfig cc where..." 

уш, Jens

+0

Исправление: ключевое слово ON также является частью JPQL, но затем для добавления дополнительных предложений к соединению. Чтобы сделать базовое соединение, оно вам не понадобится, так как ваш пример говорит –

+0

Я изменил вопрос на включение объектов. Я попробовал ваше предложение, и это не сработало. – snafua

+0

«Не работает», как у вас все еще есть (другое?) QueryException, или не ожидаемый результат? –

Смежные вопросы