我有一个使用Hibernate 5.1.5的grails 3.3.2项目。最后,我将一些JPA实体类映射到现有的Oracle表。我可以使用Hibernate创建一个会话查询,如果第二个实体没有将第一个实体引用为多个One联接的列映射,那么它可以毫无问题地返回两个表上的查询结果。如果我将该列作为manytone映射而不是字符串创建实体,那么在尝试运行查询时会出现错误。
以下是尝试执行查询时的错误。
原因:org.hibernate.hql.internal.ast.InvalidSusClauseException: with子句只能引用驱动表中的列[选择t.term作为edu.utica.jpa.entity.general.validation.Term t JOINedu.utica.jpa.entity.ar.MealPlanDeadline pd ONpd.term=t.term其中pd.deadline不为空]
这是当前形式的查询,如果“pd.term”映射为字符串而不是其实体类中的ManyToOne关系,则此查询有效。
List getMealPlanTerms() {
List terms = []
Term.withSession{ session ->
Query query = session.createQuery("""select t.term as term
from Term t
JOIN MealPlanDeadline pd ON pd.term = t.term
where pd.deadline is not null""")
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
terms = query.list()
}
}
MealPlanDeadline实体类中术语的当前映射
@ManyToOne
@JoinColumns([
@JoinColumn(name = "TYRCMPD_TERM", referencedColumnName = "STVTERM_CODE")
])
Term term
如果像这样映射,查询会起作用并返回我所期望的结果。
@Column(name = "TYRCMPD_TERM")
String term
有没有人对如何使用ManyToOne风格的连接列有任何想法?
非常感谢。
我只是用另一个方向的表/类重新编写了这篇文章,它起到了作用。但我不能完全确定为什么它是这样工作的,而不是另一种。可能与MealPlanDeadline类上的manytone映射有关。在SQL中,两个方向都可以很好地工作,所以这几乎像是hibernate中的一个bug。或者只是愚蠢的行为。
List getMealPlanTerms() {
List terms = []
Term.withSession{ session ->
Query query = session.createQuery("""select t.term as term
,t.description as description
,t.startDate as startDate
,t.endDate as endDate
,t.aidYear as aidYear
,t.acyr as acyr
,t.id as id
,t.version as version
from MealPlanDeadline pd
JOIN Term t ON t.term = pd.term
where pd.deadline is not null
""")
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
terms = query.list()
}
}
你试过这个吗?
Query query = session.createQuery("""select t.term as term
,t.description as description
,t.startDate as startDate
,t.endDate as endDate
,t.aidYear as aidYear
,t.acyr as acyr
,t.id as id
,t.version as version
from MealPlanDeadline pd
JOIN Term t ON t.term.id = pd.term.id
where pd.deadline is not null
""")
如果这不起作用,您将不得不使用Hibernate 5.2,它增加了对这种用法的支持。
问题内容: 考虑表 这是使用查询生成的视图 我想为总销售额创建一个实体,但没有sql端的视图。 该实体将通过查询构造。我发现的最接近的东西是 this ,但是我无法使其工作。 即使我定义了加载器,hibernate也会查找实体表并在找不到时给出错误。如果我创建表,它不会从我定义的命名查询中加载实体,Hibernate会生成查询本身。 有没有一种方法可以使@Loader工作,或者有另一种我可以将查询
问题内容: 可以请一些人提供如何使用联接编写以下sql查询的方法。我不希望尽量不要使用 in ,我也想替换 where 条件。 我正在使用SQL Server 2008 问题答案: 本文: NOT IN与NOT EXISTS与LEFT JOIN / IS NULL:SQL Server 如果您感兴趣的话。 简而言之,此查询: 可以工作,但是效率不如(或)构造。 您还可以使用以下命令: 这既不使用也
我有EntityA和EntityB,它们具有一个从EntityA->EntityB的OneToMany关系。我想将EntityB作为属性包含到EntityA中。 另一种解决方法是在方法中获取并设置该属性,但我的目标是在entity类中找到一个解决方案。有人有主意吗?谢谢
问题内容: 我想加入两个表CUSTMR和DEPRMNT。 我需要的是:LEFT OUTER JOIN内有两个或多个带有子查询的表的LEFT OUTER JOIN,如下所示: 表格:CUSTMR,DEPRMNT 查询为: 这里的子查询是: 是否可以在LEFT OUTER JOIN内编写这样的子查询? 在我的DB2数据库上运行此查询时出现错误。 问题答案: 您需要在子选择上使用“ correlatio
问题内容: 我想用Hibernate映射超类中的通用字段。 我的母亲班是: 一个子类: 如您所见,我将覆盖value字段以指定要在数据库中使用的列。我的表ParameterValue由几列组成,每种类型对应一列。 但是hibernate抱怨: 好的,但是超类中getValue的良好配置是什么?(我在“需要帮助的地方”发表了评论) 问题答案: 我很确定您不能将单个Java属性映射到三个不同的列。您将