当前位置: 首页 > 知识库问答 >
问题:

在多列联接表上使用投影

钱雅逸
2023-03-14

日安。

因此,我有mapping@id@generatedvalue(strategy=generationtype.sequence,generator=“discount_fares_id_sequence”)@sequenceGenerator(name=“discount_fares_id_sequence”,sequenceName=“discount_fares_id_seq”,allocationSize=1)私有长ID;

@Column
private Long discount;

@Column(name = "fare_code", length = 255)
private String fareCode;

@ManyToOne
@JoinColumn(name = "aircompany_id", foreignKey = @ForeignKey(name = "fk_discfares_ref_aircompany_id"))
private AircompanyRB aircompanyId;

我如何使用投影只提取

discountFare id discountfarecode和aircompany_id(AircompanyRB的密钥)

所以基本上所有的DiscountFares字段加上AirCompanyRB的唯一关键字?

我试过了

    DetachedCriteria criteria = DetachedCriteria.forClass(DiscountFares.class)
        .createCriteria("aircompanyId")
        .setProjection(Projections.projectionList()
        .add(Projections.property("id"))
        .add(Projections.property("discount"))
        .add(Projections.property("fareCode")));

    List<DiscountFares> result = criteria.getExecutableCriteria(sessionFactory.getCurrentSession()).list();

但它会抛出异常,表示AircompanyRB没有字段“DiscountFares”(是的,它没有-DiscountFares有)

非常感谢!我们非常感谢任何帮助

共有1个答案

咸浩初
2023-03-14

首先,使用条件查询而不是死气沉沉的简单HQL查询会使您的生活变得困难:

select df.id, df.discount, df.fareCode, ac.id 
from DiscountFares df
left join df.aircompanyId ac

现在,如果您真的想使用一个条件,只需翻译上面的查询:

Criteria c = session.createCriteria(DiscountFares.class, "df");
c.createAlias("df.aircompanyId", "ac", JoinType.LEFT_OUTER_JOIN);
c.setProjection(Projections.projectionList()
    .add(Projections.property("df.id"))
    .add(Projections.property("df.discount"))
    .add(Projections.property("df.fareCode"))
    .add(Projections.property("ac.id")));
 类似资料:
  • 问题内容: 所以我想做的是:- 相当奇怪的查询,我知道!但是我正在尝试在EntityFramework / Linq中复制此代码- 查看所有示例,当联接使用AND(使用匿名类型)但对OR联接存在相同的结果时,我可以看到一种非常简单的方法? 问题答案: 只需使用where子句进行交叉连接 令人怀疑的是,连接条件或连接条件是否会比此条件更有效,但是可能会导致相同的执行计划。除了性能,它还会产生相同的结

  • 假设我有两个表和。包含和列。有两列和,它们链接回的列。

  • 问题内容: 我观察到有两种方法可以在多个表上实现目标。结果集中的一列将被更新,并且可能需要速度。结果集可以通过以下方式获得: 情况1: 或者 情况2: 两者给出的结果相同,只是连接条件有所不同。哪个运行/执行速度更快? eval_id为,report_type和course_name为。 对于所使用的开发人员,情况1具有以下统计信息:[SELECT-3077行,0.048秒]提取了结果集…执行了1

  • 描述: 我有两张桌子,和。我想在显示员工详细信息时直接显示,但我不想配置这两个实体之间的关系(或)。 因为这将加载列的所有值,但这些值对我来说毫无用处,所以我只需要 。下面是我的代码,但它不起作用。 商店员工类型: 商店_员工: 存储库: 这可以显示<code>类型名称@Transient,它可以成功保存,但当我查询实体时,“typeName”的值为空。

  • 问题内容: 我有两个表,和。 在表中我有一列。该列由电影适合的类别组成。这些类别是用逗号分隔的ID。 这是一个例子: 现在是一个实际的问题:是否可以执行一个查询,从电影表中排除类别列,而是从类别表中选择匹配的类别并以数组形式返回它们?像联接一样,但问题是存在多个用逗号分隔的类别,是否可以进行某种正则表达式? 问题答案: 在数据库字段中使用逗号分隔的列表是一种反模式,应不惜一切代价避免使用。 因为在

  • 我很难尝试将最优的数据库设计(使用BCNF)映射到JPA实体。 我有3个实体:Place,Person和action。 在一个给定的地方,你有执行动作的人,我们也有他们在那里执行动作的次数。 注意,每个实体都可以独立存在:您可以有一个没有执行任何操作的地方,一个人不执行任何操作,以及任何人都不执行的操作。 为了存储这些信息,我将数据库模式建模为: 现在我正在尝试创建JPA实体来映射它,而这正是我遇