美好的一天。
所以我有映射 @ID @GenerateValue(策略 = GenerationType.SEQUENCE, 生成器 = "discount_fares_id_sequence") @SequenceGenerator( 名称=“discount_fares_id_sequence”, 序列名称 = "discount_fares_id_seq", 分配大小 = 1 ) 私有(private)长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;
如何使用投影仅提取
折扣票价 ID 折扣 票价代码 和aircompany_id(AircompanyRB 的 key )
那么基本上 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 有)
非常感谢! 非常感谢任何帮助
最佳答案
首先,使用 Criteria 查询而不是简单的 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")));
关于java - 在多列上使用投影 - 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25236923/