У меня есть такой класс:
@Entity(name = "LP_TEMPLATE")
public class LpTemplate {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, updatable = false)
private Long id;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "TEMPLATE_APPS",
inverseJoinColumns = { @JoinColumn(name = "appId") },
joinColumns = { @JoinColumn(name = "templateId") })
private Set<LpApp> apps = new HashSet<>();
...
}
, и я пытаюсь написать метод в хранилище, чтобы получить все экземпляры LpTemplate для данного appId. По сути это обратное отображение @ManyToMany.
@Repository
public interface LpTemplateRepository extends JpaRepository<LpTemplate, Long> {
@Query("select T from LP_TEMPLATE as T inner join T.apps as TA on T.id = TA.templateId AND TA.appId = ?1")
List<LpTemplate> findTemplatesWithApp(long appId);
}
Однако при запуске я получаю исключение: не удалось разрешить свойство: templateId of: test.LpApp
Вот полная трассировка стека:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: could not resolve property: templateId of: test.LpApp [select T from test.LpTemplate as T inner join T.apps as TA on T.id = TA.templateId AND TA.appId = ?1]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:277) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:191) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:611) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:720) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
... 72 common frames omitted
Моя предыдущая версия (которая также не работала кстати) была такой:
@Repository
public interface LpTemplateRepository extends JpaRepository<LpTemplate, Long> {
@Query("select T from LP_TEMPLATE as T inner join TEMPLATE_APPS as TA on T.id = TA.templateId AND TA.appId = ?1")
List<LpTemplate> findTemplatesWithApp(long appId);
}
И здесь я получил исключение: Ожидается путь для присоединения!
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select T from test.LpTemplate as T inner join TEMPLATE_APPS as TA on T.id = TA.templateId AND TA.appId = ?1]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:277) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:191) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:611) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:720) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
... 72 common frames omitted
Что я здесь не так делаю? Заранее спасибо.