Jpa 无向多对一JPQL选择外键

Jpa 无向多对一JPQL选择外键,jpa,criteria-api,Jpa,Criteria Api,我读过不同的帖子,但我找不到一个有效的解决办法。我认为问题是由OneToMany关系引起的。我必须访问以下实体: // Mandant.class (client) @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name = "FK_MANDANT") private List<Leistung> leistungen = new ArrayList<>(); /

我读过不同的帖子,但我找不到一个有效的解决办法。我认为问题是由
OneToMany
关系引起的。我必须访问以下实体:

 // Mandant.class (client)
 @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
 @JoinColumn(name = "FK_MANDANT")
 private List<Leistung> leistungen = new ArrayList<>();

 // Mitarbeiter.class (employee)
 @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
 @JoinColumn(name = "FK_MITARBEITER")
 private List<Leistung> leistungen = new ArrayList<>();

 // Kategorie.class (category)
 @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
 @JoinColumn(name = "FK_KATEGORIE")
 private List<Leistung> leistungen = new ArrayList<>();
现在,我使用
createQuery()
创建了一个查询


我还尝试了
l.fk\u mandant.id
l.fk\u mandant.id
l.fk\u mandant
。我使用EclipseLink和MySQL数据库。所有实体都有一个名为id的主键。是否可以通过外键筛选付款(Leistungen)?由于无向关系,支付不知道其他实体。但是在数据库中,付款具有外键属性,因此应该可以进行?

我在一个德国论坛上得到了一个提示。通过
createNativeQuery()
方法,我可以使用数据库方言,这里是MySQL。但我认为这不是一个很好的解决方案,因为无法保证平台独立性。

您是否尝试过使用
leistung.mandant
而不是
l.mandant
?当然。没什么区别/<代码>由于无向关系,付款不知道其他实体。但在数据库上,支付具有外键属性这一矛盾。如果是单向的,
Leistung
表应该没有外键。数据库表需要外键。否则JPA无法将实体相互关联。
 sb.append("l.mandant = ");
 sb.append(mandant.getId());
 sb.append(" AND ");
 EntityManager entityManager = PREntityManagerFactory.getInstance().createEntityManager();
 RepositoryUtils<List<Leistung>> repositoryUtils = new RepositoryUtils<>();
 JpaFunction<List<Leistung>> function = () -> 
 entityManager.createQuery(sb.toString(), Leistung.class).getResultList();
 return repositoryUtils.withoutTransaction(entityManager, function);
Exception in thread "main" java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Problem compiling [SELECT l FROM Leistung l WHERE l.fakturierungsdatum IS NULL AND l.mandant = 1 ORDER BY l.datum]. 
[64, 73] The state field path 'l.mandant' cannot be resolved to a valid type.