我的应用程序中有两个表-Resident
和Vehicle
,如下所示:
@Entity
@Table(name = "resident")
public class Resident {
@Id // PKey
private String id;
private Vehicle primaryVehicle;
@ManyToMany
private List<Vehicle> vehicles;
...
}
@Entity
@Table(name = "vehicle")
public class Vehicle {
@Id // PKey
private String id;
private String model;
...
}
这导致在My Postgres数据库中创建了3个表:
resident
vehicle
resident_vehicles
所以这个额外的表resident_vehicles
是自动创建的,在我的代码库中没有该表的类.
我有一个复杂的查询,它要求我使用原生查询调用该表.例如,简化的查询将是:
select vehicle_id from vehicle_currencies where vehicle_id = '<some-id>'
请注意,此查询是我想要做的事情的简化版本.我的SQL查询更复杂,最重要的是在运行时动态生成.由于我拥有的动态行为,使用JPA存储库方法非常困难.
出于我的目的,我使用Java的Native Query,如下所示:
Query query = entityManager.createQuery("select vehicle_id from vehicle_currencies where vehicle_id = '<some-id>'
List result = query.getResultList();
...
然而,这是导致错误的原因:
org.hibernate.hql.internal.ast.QuerySyntaxException: resident_vehicles is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:170) ~[hibernate-core-5.6.14.Final.jar:5.6.14.Final]
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) ~[hibernate-core-5.6.14.Final.jar:5.6.14.Final]
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:77) ~[hibernate-core-5.6.14.Final.jar:5.6.14.Final]
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:334) ~[hibernate-core-5.6.14.Final.jar:5.6.14.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3782) ~[hibernate-core-5.6.14.Final.jar:5.6.14.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3671) ~[hibernate-core-5.6.14.Final.jar:5.6.14.Final]
...
如何解决此错误?