首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非定向多对一JPQL选择外键

问非定向多对一JPQL选择外键
EN

Stack Overflow用户
提问于 2017-07-24 19:53:58
回答 1查看 125关注 0票数 0

我读了不同的帖子,但我找不到一个有效的解决方案。我认为OneToMany关系导致了这个问题。我必须使用以下实体:

代码语言:javascript
复制
 // 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<>();

它们具有undirectional OnetoMany关系。我在LeistungsRepository.class中编写了一个方法filterLeistungen(...)。现在我想通过模糊数量的过滤器来过滤支付(Leistungen)。所以我把过滤器和一个字符串生成器组合成一个JPQL-Select。

代码语言:javascript
复制
 sb.append("l.mandant = ");
 sb.append(mandant.getId());
 sb.append(" AND ");

现在,我使用createQuery()创建一个查询。

代码语言:javascript
复制
 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);

但是当我执行查询时,我得到了以下异常:

代码语言:javascript
复制
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.

我还尝试过l.mandant.id、l.fk_mandant.id或l.fk_mandant。我使用EclipseLink和一个MySQL数据库。所有实体都有一个名为id的主键。是否可以通过外键过滤支付(Leistungen)?由于单向关系,支付不知道其他实体。但是在数据库上,支付具有外键属性,那么它应该是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-24 23:59:50

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45279967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档