首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左连接Fetch在多个条件下不工作

左连接Fetch在多个条件下不工作
EN

Stack Overflow用户
提问于 2019-12-31 20:54:41
回答 1查看 779关注 0票数 1

我正在编写这个查询:

代码语言:javascript
复制
SELECT distinct g FROM Group g left join fetch g.groupPlaylists as gp on gp.playEndDay >= CURRENT_DATE and gp.status <>:status where g.zoneId= :zoneId and g.status <>:status

但它抛出了一个异常:

代码语言:javascript
复制
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause not allowed on fetched associations; use filters [SELECT distinct g FROM com.instoreradio.model.Group g left join fetch g.groupPlaylists as gp on gp.playEndDay >= CURRENT_DATE and gp.status <>:status where g.zoneId= :zoneId and g.status <>:status]

这个问题有什么解决方案吗?

它在没有fetch的情况下工作,但返回了错误的GroupPlaylist

这是我的实体映射:@Entity @Table(name = "groups") @DynamicUpdate公共类组扩展BaseModel {

代码语言:javascript
复制
private static final long serialVersionUID = -4864520840627628591L;

private String storeIds;

private Long regionId;

private Long zoneId;

private Long groupManagerId;

private String groupName;

private String groupComment;

@JsonBackReference
//@JsonIgnore
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name = "company_id")
private Companies companies;

@JsonManagedReference
@OneToMany(cascade=CascadeType.ALL,mappedBy="group",orphanRemoval=true)
@Fetch(FetchMode.JOIN)
private Set<GroupPlaylist> groupPlaylists=new HashSet<>();

}

代码语言:javascript
复制
@Entity
@Table(name = "group_playlist")
@DynamicUpdate
public class GroupPlaylist extends JsonType {

/**
 * 
 */
private static final long serialVersionUID = -982336326147846219L;

@JsonBackReference
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "group_id")
private Group group;

private Long groupCompanyId;

private String playlistTitle;

private Date playStartDay;

private Date playEndDay;

private Integer totalSongs;

private BooleanEnum isDefaultPlaylist;

@JsonManagedReference
@OneToMany(mappedBy = "groupPlaylist", fetch = FetchType.LAZY, 
orphanRemoval = true)
@Fetch(FetchMode.JOIN)
private Set<TimeSlot> timeSlots = new HashSet<>();

@JsonManagedReference
@OneToMany(mappedBy = "groupPlaylist", fetch = FetchType.LAZY, 
orphanRemoval = true)
@Fetch(FetchMode.JOIN)
private Set<StorePlaylist> storePlayLists = new HashSet<>();

@JsonManagedReference
@OneToMany(mappedBy = "groupPlaylist", fetch = FetchType.LAZY, 
orphanRemoval = true)
@Fetch(FetchMode.JOIN)
private Set<GroupPlaylistSongs> groupPlaylistSongs = new HashSet<>();
EN

回答 1

Stack Overflow用户

发布于 2020-01-02 17:51:51

不能将on子句用于映射中定义的条件之外的其他条件。

查询必须使用where子句中的条件,如下所示:

代码语言:javascript
复制
SELECT distinct g 
FROM Group g 
left join fetch g.groupPlaylists as gp 
where gp.playEndDay >= CURRENT_DATE 
  and gp.status <>:status 
  and g.zoneId= :zoneId 
  and g.status <>:status
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59544387

复制
相关文章

相似问题

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