我在Spring-Boot启用JPA的项目中有以下相关的JPA注释类(所有Groovy代码):
@Entity
abstract class Character {
@Id
String id;
String name;
@ElementCollection(targetClass = Episode)
@Enumerated(EnumType.ORDINAL)
Collection<Episode> appearsIn;
}
@Entity(name = "Human")
public class Human extends Character {
String homePlanet;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "favorite_droid_id")
Droid favoriteDroid;
}
public enum Episode {
PHANTOM_MENACE,
ATTACK_OF_THE_CLONES,
REVENGE_OF_THE_SITH,
A_NEW_HOPE,
EMPIRE_STRIKES_BACK,
RETURN_OF_THE_JEDI,
THE_FORCE_AWAKENS
}
当我尝试执行以下JPA查询时:
def query = em.createQuery("from Human h where h.appearsIn in (:episodes)");
query.setParameter("episodes", EnumSet.of(Episode.THE_FORCE_AWAKENS));
def result = query.getResultList();
生成的SQL语句似乎没有字符表的别名或appares_in的列名:
select human0_.id as id2_0_, human0_.name as name3_0_, human0_.favorite_droid_id as favorite6_0_, human0_.home_planet as home_pla5_0_
from character human0_
cross join character_appears_in appearsin1_
where human0_.dtype='Human' and human0_.id=appearsin1_.character_id and (. in (?))
from Human h where h.appearsIn = :episode
生成以下SQL:
select human0_.id as id2_0_, human0_.name as name3_0_, human0_.favorite_droid_id as favorite6_0_, human0_.home_planet as home_pla5_0_
from character human0_
cross join character_appears_in appearsin1_
where human0_.dtype='Human' and human0_.id=appearsin1_.character_id and .=?
非常感谢任何帮助。
您的查询是无效的-正如@Neil Stockton指出的,通过在(:episodes)中编写h.appearsin,您说的是“collection in collection”,这是没有意义的。
您应该像这样声明一个“集合成员变量”:
select distinct h
from Human h
join h.appearsIn ai
where ai in (:episodes)
ai
表示apparosin
的单个元素(类似迭代器)。
问题内容: 我的Web应用程序中有一个管理控制台,允许管理员在数据库上执行自定义SQL SELECT查询。 在下面,该应用程序正在使用Hibernate,但是这些查询不是HQL,它们是纯SQL,因此我使用的是本机查询,如下所示: 这可以正常工作,但是它只返回数据行,没有额外的信息。我还想获取列名,因此当我将结果打印回用户时,我还可以打印标题以显示各个列。 有什么办法吗? 问题答案: 经过很长一段时
问题内容: 我不是要命令。 我想创建一个与heidisql类似的应用程序,您可以在其中指定SQL查询,并在执行时返回包含代表查询结果的行和列的结果集。结果集中的列名称应与您在SQL查询中定义的所选列匹配。 在我的Python程序中(使用),我的查询仅返回行和列的结果,而不返回列的名称。在下面的例子中,列名应为,和。SQL最终将在程序外部。 我能想到的唯一方法是编写自己的SQL解析器逻辑以提取选定的
问题内容: 查询,本机查询,命名查询和类型查询之间有什么区别?“独立”查询是否存在,还是只是缩写?在我看来,本机查询是用简单sql编写的查询,而命名查询与实体(hibernate映射)有关。有人可以简要解释一下吗? 问题答案: 询问 查询是指JPQL / HQL查询,其语法类似于通常用于执行DML语句(CRUD操作)的SQL。 在JPA中,您可以使用创建查询。您可以查看API以获得更多详细信息。
问题内容: 我创建了一个存储过程,我想在其中添加替代的order by子句。问题是查询在“无效的列名’aantal regels’”上失败 这是我现在的查询。 希望有人可以帮助我! 问题答案: 您不能以这种方式按别名排序。 第一种选择是重复代码。注意:仅仅因为重复代码,SQL引擎就不会天真地再次执行它,而是重用了结果。 或全部使用子查询…