java - 如何正确编写 hql 查询以获取数据?我一直遇到错误
问题描述
我尝试编写一个 hql 查询以通过 teamSeasonId 和 userId 获取 BaseballLineup 对象,但我不断收到 StackOverflow 错误。首先,当我一起编写查询时,我得到了 MultipleBagfetchError,然后我得到了lazyfetchexemption,现在我有 StackOverflow 错误。如何正确编写查询?
@Entity
@Table(name = "baseball_lineup", schema = "apbago", catalog = "apbago")
public class BaseballLineup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Basic
@Column(name = "lineup_name")
private String lineupName;
@OneToMany(mappedBy = "lineup", cascade = CascadeType.REMOVE)
private List<BaseballLineupPlayerStatus> lineupPlayerStatuses;
@ManyToOne
@JoinColumn(name = "lineup_type", referencedColumnName = "id", nullable = false)
private BaseballLineupType lineupType;
@OneToMany(mappedBy = "lineup", cascade = CascadeType.REMOVE)
private List<BaseballLineupEntry> lineupEntries;
@ManyToOne
@JoinColumn(name = "owner_user_id", referencedColumnName = "id", nullable = true)
private User owner;
@ManyToOne
@JoinColumn(name = "team_season_id", referencedColumnName = "id", nullable = false)
private TeamSeason teamSeason;
}
@Entity
@Table(name = "baseball_lineup_player_status", schema = "apbago", catalog = "apbago")
public class BaseballLineupPlayerStatus {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name = "lineup_id", referencedColumnName = "id", nullable = false)
private BaseballLineup lineup;
@Basic
@Column(name = "benched")
private Boolean benched;
@ManyToOne
@JoinColumn(name = "player_season_id", referencedColumnName = "id", nullable = false)
private BaseballPlayerSeason playerSeason;
}
@Entity
@Table(name = "baseball_lineup_entry", schema = "apbago", catalog = "apbago")
public class BaseballLineupEntry {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Basic
@Column(name = "batting_order_index")
private Long battingOrderIndex;
@ManyToOne
@JoinColumn(name = "lineup_id", referencedColumnName = "id", nullable = false)
private BaseballLineup lineup;
@ManyToOne
@JoinColumn(name = "defensive_position_id", referencedColumnName = "id", nullable = false)
private BaseballLineupDefensivePosition defensivePosition;
@ManyToOne
@JoinColumn(name = "player_season_id", referencedColumnName = "id", nullable = false)
private BaseballPlayerSeason playerSeason;
}
@Override
public List<BaseballLineup> findAllLineupsForUserIncludingDefaults(Long teamSeasonId, Long userId, boolean limit) {
System.out.println("code reach 62 herhe");
Query query = sessionFactory.getCurrentSession()
.createQuery("select distinct l from BaseballLineup l "
+ " inner join fetch l.lineupType lt "
+ " inner join fetch l.teamSeason ts "
+ " inner join fetch l.lineupEntries le "
+ " inner join fetch le.defensivePosition def "
+ " inner join fetch le.playerSeason pes "
+ " left join fetch l.owner o "
+ " where ts.id = :teamSeasonId "
+ " and ts.active = true "
+ " and pes.active = true "
+ " and (o is null or o.id = :userId) "
+ " order by l.id")
.setLong("userId", userId)
.setLong("teamSeasonId", teamSeasonId);
query.list();
System.out.println("code reach 79 herhe");
query = sessionFactory.getCurrentSession()
.createQuery("select distinct l from BaseballLineup l "
+ " inner join fetch l.lineupType lt "
+ " inner join fetch l.teamSeason ts "
+ " left join fetch l.lineupPlayerStatuses lp "
+ " left join fetch lp.playerSeason pls "
+ " left join fetch l.owner o "
+ " where ts.id = :teamSeasonId "
+ " and ts.active = true "
+ " and pls.active = true "
+ " and (o is null or o.id = :userId) "
+ " order by l.id")
.setLong("userId", userId)
.setLong("teamSeasonId", teamSeasonId);
query.list();
if (limit) {
query.setMaxResults(LINEUP_UNLOCK_LIMIT);
}
return query.list();
}
解决方案
推荐阅读
- spring-boot - Spring Boot 事务不回滚
- python-3.x - 如何有效地添加或更新 3D 曲线的颜色(没有 for 循环)?
- python - numpy 范围的 2D
- sql - 如何以最快的方式获取给定 id 的最后一条记录?(微软 SQL)
- reactjs - React Material UI 移除自动填充背景颜色
- java - Apache CSV Reader:如何按标题名称读取 CSV 列?
- ios - 如何解决 Google Fabrics 崩溃 - 致命异常:DeviceNotSupported?
- apache-spark - Spark,从每个分区获取单个值的有效方法?累加器?
- javascript - 如何解决“未捕获的语法错误:无法在模块外使用导入语句”?
- kubernetes - 使用 Kubernetes 进行基于标头的路由